2022.12.06
Spring 으로 메모프로그램 만들기
스프링 입문강의를 이어서 듣기 시작했지만 오늘도 발생한 에러를 해결하는데 시간을 많이 쏟았다.
강의를 다 듣고 마지막 메모프로그램을 어느정도 따라해봤는데 머릿속에 들은게 없이 복붙만 열심히 한 느낌......이다
다시해보라면 어디서부터 시작을 해야될지 이것이 무엇인지 아무것도 모르는 것 같다.
일단 다른 스프링 교재를 구해서 같이 공부를 해야 할 것 같다. (이번강의 ..스읍..내가 멍청한ㄱ..꺼야 스파르타는 완벽.해)
내일까지 과제가 있지만 현재 나의 수준에선 절대 불가능으로 보여 그때까지 할수있는 만큼 좀 더 공부를 하기로...
오늘의 알고리즘!
캐릭터의 좌표
제한사항
- board은 [가로 크기, 세로 크기] 형태로 주어집니다.
- board의 가로 크기와 세로 크기는 홀수입니다.
- board의 크기를 벗어난 방향키 입력은 무시합니다.
- 0 ≤ keyinput의 길이 ≤ 50
- 1 ≤ board[0] ≤ 99
- 1 ≤ board[1] ≤ 99
- keyinput은 항상 up, down, left, right만 주어집니다.
입출력 예
keyinput = ["left", "right", "up", "right", "right"]
board = [11, 11]
result = [2, 1]
입출력 예 설명 #1
- [0, 0]에서 왼쪽으로 한 칸 오른쪽으로 한 칸 위로 한 칸 오른쪽으로 두 칸 이동한 좌표는 [2, 1]입니다.
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = new int[] {0,0};
int maxWidth = board[0]/2;
int minWidth = -board[0]/2;
int maxHeight = board[1]/2;
int minHeight = -board[1]/2;
for (int i=0; i<keyinput.length; i++) {
if (keyinput[i].equals("left")) {
if(answer[0] <= minWidth){
answer[0] = minWidth;
} else {
answer[0] -= 1;
}
} else if (keyinput[i].equals("right")){
if(answer[0] >= maxWidth){
answer[0] = maxWidth;
} else {
answer[0] += 1;
}
} else if (keyinput[i].equals("down")){
if(answer[1] <= minHeight){
answer[1] = minHeight;
} else {
answer[1] -= 1;
}
} else if (keyinput[i].equals("up")){
if(answer[1] >= maxHeight){
answer[1] = maxHeight;
} else {
answer[1] += 1;
}
}
}
return answer;
}
}
처음 작성했던 코드는 70퍼센트 정도의 정확도가 나왔다.
처음 작성했던 코드는 다음과 같았다.
for (int i=0; i<keyinput.length; i++) {
if (keyinput[i].equals("left")) {
answer[0] -= 1;
} else if (keyinput[i].equals("right")){
answer[0] += 1;
} else if (keyinput[i].equals("down")){
answer[1] -= 1;
} else if (keyinput[i].equals("up")){
answer[1] += 1;
}
}
if (answer[0] > maxWidth){
answer[0] = maxWidth;
} else if (answer[0] < minWidth) {
answer[0] = minWidth;
} else if (answer6[1] > maxHeight) {
answer[1] = maxHeight;
} else if (answer6[1] < minHeight) {
answer[1] = minHeight;
}
처음에 for문을 이용하여 keyinput 배열에 left right down up 만큼 1을 더하거나 빼준다음
최종값이 가로, 세로의 최댓값 보다 크거나 최솟값 보다 작으면 최댓값과 최솟값으로 출력해주는 코드였다.
처음엔 생각을 못했는데 70퍼센트라는 결과를 보고 다시 생각해본 결과
만약 가로의 범위가 -3 부터 +3까지라 하였을 때 '좌좌좌좌좌우'를 틀린코드로 입력했을 때의 결과는
-3 이고 맞는 코드로 입력했을 때는 -2 일 것이다.
만만하게 풀었다가 이게왜...? 라는 생각을 하게했던 문제였다.
결론 : 스프링미웡!
'TIL' 카테고리의 다른 글
| 스파르타 내배캠 Spring 53일차 (1) | 2022.12.22 |
|---|---|
| 스파르타 내배캠 Spring 45일차 (1) | 2022.12.14 |
| 스파르타 내배캠 Spring 36일차 (0) | 2022.12.05 |
| 스파르타 내배캠 Spring 33일차 (0) | 2022.12.04 |
| 스파르타 내배캠 Spring 32일차 (0) | 2022.12.01 |