[Coding Test] JAVA 청소로봇 - 시뮬레이션

LeeSeungEun·2023년 5월 17일
0

Coding Test

목록 보기
18/38

1. 문제

2. 코드

public class Main {
    public int[] solution(String moves) {
        int x = 0, y = 0;

        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};
        char[] direction = {'U', 'R', 'D', 'L'}; // 리펙토링

        for (char move : moves.toCharArray()) {
            for (int i = 0; i < direction.length; i++) {
                if (move == direction[i]) {
                    int nx = x + dx[i];
                    int ny = y + dy[i];

                    //격자판을 벗어나지 않는 경우에만 위치를 더해준다.
                    if (0 <= nx && nx < 100 && 0 <= ny && ny < 100) {
                        x = nx;
                        y = ny;
                    }
                    break;
                }
            }
        }
        return new int[]{x, y};
    }

    public static void main(String[] args) {
        Main T = new Main();
        System.out.println(Arrays.toString(T.solution("RRRDDDLU")));
    }
}
public class Main {
    public int[] solution(String moves) {
        int x = 0, y = 0;

        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};
        for (char c : moves.toCharArray()) {
            if (c == 'U') {
                x = x + dx[0];
                y = y + dy[0];
            } else if (c == 'R') {
                x = x + dx[1];
                y = y + dy[1];
            } else if (c == 'D') {
                x = x + dx[2];
                y = y + dy[2];
            } else if (c == 'L') {
                x = x + dx[3];
                y = y + dy[3];
            }
        }
        return new int[]{x, y};
    }

    public static void main(String[] args) {
        Main T = new Main();
        System.out.println(Arrays.toString(T.solution("RRRDDDLU")));
    }
}
HashMap<Character, Integer> map = new HashMap<>();
        map.put('U', 0);
        map.put('R', 1);
        map.put('D', 2);
        map.put('L', 3);

        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};

        int x = 0;
        int y = 0;

        for (char ch : s.toCharArray()) {
            x += dx[map.get(ch)];
            y += dy[map.get(ch)];
        }

        System.out.printf("[%d, %d]\n", x, y);

3. 풀이

  • Map이 탐색이 O(1)인 거는 맞지만, 기본적으로 Map 라이브러리 자체가 가볍지는 않아서 해당 유형에서는 배열로 하는 것을 추천한다.

0개의 댓글