이것이 취업을 위한 코딩 테스트다. 구현 [상하좌우]

GoshK·2022년 1월 25일
0

이것이 취업을 위한 코딩 테스트다. with 파이썬 - 나동빈

나의 풀이

public class UpDownLeftRight {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        String[] plans = br.readLine().split(" ");

        int x = 1; //row
        int y = 1; //column

        int[] posX = new int[]{-1, 1, 0, 0}; //U D L R
        int[] posY = new int[]{0, 0, -1, 1}; //U D L R
        String[] direction = new String[]{"U", "D", "L", "R"};

        for(String i : plans) {
            int tempX = -1, tempY = -1;

            for(int j = 0; j < direction.length; j++) {
                if(i.equals(direction[j])) {
                    tempX = x + posX[j];
                    tempY = y += posY[j];

                    break;
                }
            }

            if(tempX < 1 || tempY < 1 || tempX > N || tempY > N) {
                continue;
            }

            x = tempX;
            y = tempY;
        }

        System.out.println(x + " " + y);
    }
}
int[] posX = new int[]{-1, 1, 0, 0}; //U D L R
int[] posY = new int[]{0, 0, -1, 1}; //U D L R
String[] direction = new String[]{"U", "D", "L", "R"};
  • 해당 방향과 좌표를 배열로 미리 정의해둔다.
  • 좌표와 방향의 인덱스는 같아야한다.
for(String i : plans) {
    int tempX = -1, tempY = -1;

    for(int j = 0; j < direction.length; j++) {
        if(i.equals(direction[j])) {
            tempX = x + posX[j];
            tempY = y += posY[j];

            break;
        }
    }

    if(tempX < 1 || tempY < 1 || tempX > N || tempY > N) {
        continue;
    }

    x = tempX;
    y = tempY;
}
  • 입력받은 계획서(plan) 의 갯수 만큼 배열을 돌린다.
  • 임의의 X, Y 좌표 변수를 만든다.
  • direction 배열 길이만큼 반복을 돌면서 direction 과 입력받은 계획서의 방향이 같다면 임의의 X, Y 좌표에 기존 위치인 x, y 에 해당 좌표의 값을 더해준다.
    • 더했으면 빠른 반복 종료를 위해 break 를 해주었다.
  • 만약 임의의 X, Y 좌표가 1보다 작거나 N 보다 커서 배열의 범위를 벗어나는 경우 무시하고 건너뛴다.
  • 아니면 기존 x, y 좌표의 값을 바꿔준다.

문제 해설 & 느낀점

처음에 tempX, tempY 변수를 두지 않고, 그냥 x, y 에 직접 더해주어 0이나 N 을 넘을 경우 if 문을 다 따로 해줘야 했는데, 임의의 변수를 두고 기존의 값에 대입해주는 형식으로 하니 수월해졌다.

0개의 댓글