[JAVA] 프로그래머스 : 방문 길이

조예빈·2024년 7월 18일
0

Coding Test

목록 보기
61/146
post-custom-banner

https://school.programmers.co.kr/learn/courses/30/lessons/49994
이 문제는 방문했던 경로를 다시 방문하는 경우에는 길이 값을 더해주지 않는 문제이다.

초반에는 이 문제를 풀 때, 각 좌표를 이중 배열의 index값으로 선언하고, 그 안에 hashset을 통해 방문한 방향만 넣어주었다. 하지만, 25점으로 모든 test case를 통과하지 못했었다. 다시 생각을 해 보니 한 길을 오른쪽으로 간 것과 왼쪽으로 간 것이 다른 것이 아니라 동일하다는 사실을 깨달았다.

위의 그림처럼 오른쪽으로 한 칸 이동한 경우와, 왼쪽으로 한 칸 이동한 경우는 같은 길을 지난 것이다. 그러므로 반대 방향도 고려 해 주어야 한다.

import java.util.*;

class Solution {
    public int solution(String dirs) {
        HashSet<String> set = new HashSet<>(); // x,y,방향을 string으로 합쳐서 넣기
        int x = 0;
        int y = 0;

        for (int i = 0; i < dirs.length(); i++) {
            if (dirs.charAt(i) == 'R') {
                if (x < 5) {
                    set.add(x + "" + y + "R"); //현재 좌표랑 이동방향을 넣기
                    x++;
                    set.add(x + "" + y + "L"); //현재 좌표에서 한 칸 이동한 것의 반대방향을 넣기
                }
            }
            if (dirs.charAt(i) == 'L') {
                if (x > -5) {
                    set.add(x + "" + y + "L");
                    x--;
                    set.add(x + "" + y + "R");
                }
            }
            if (dirs.charAt(i) == 'U') {
                if (y < 5) {
                    set.add(x + "" + y + "U");
                    y++;
                    set.add(x + "" + y + "D");
                }
            }
            if (dirs.charAt(i) == 'D') {
                if (y > -5) {
                    set.add(x + "" + y + "D");
                    y--;
                    set.add(x + "" + y + "U");
                }
            }
        }

        return set.size()/2; //양 쪽 방향을 넣었으니까 2로 나누기
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러
post-custom-banner

0개의 댓글