본문 바로가기
[ 다먹살 ]/- Coding

[프로그래머스] 레벨2 방문길이

by 엉망으로살기 2021. 8. 24.
반응형

https://programmers.co.kr/learn/courses/30/lessons/49994?language=java 

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

 

사실 이 문제는 예전에 좀 봤다가 못 풀었다. 그래서 구글링의 도움을 좀 받았다. 결과적으로 예외케이스에 대한 처리를 못해줘서 통과가 안됬었다.

 

 

문제 설명에 그림이 많아서 되게 길어보이지만 사실 어렵진 않은 문제였다. 결국 경로의 길이를 구하는 건데 시작 좌표와 도착 좌표를 동시에 생각하는 게 포인트였던 것 같다.

 

1. 명령어를 U, D, R, L 4가지로 나눠서 좌표를 각 명령어에 맞게 움직인다.

2. 움직이기 전 좌표 A(y1, x1)과 움직인 후 좌표 B(y2, x2)를 선택해 모두 HashSet에 넣는다.

  2-1. 이 때 A에서 B로 움직인 경로나 B에서 A로 움직인 경로는 결과적으로 같은 길이기 때문에 중복에 대한 처리가 필요하다.

  2-2. 따라서 A+B, B+A꼴로 HashSet에 넣어서 중복처리를 해준다.

3. 예외적으로, 움직이고 나서도 A와 B의 좌표가 같다면 넘어가서 다음 명령어를 처리한다.

 

문제

 

 

제한사항 및 입출력 예시

 

코드

import java.util.HashSet;

class Solution
{
    public int solution(String dirs)
    {
        // 각각 이동 전 좌표와 이동 후 좌표 (x, y)
        int nowY = 0;
        int nowX = 0;
        int y = 0;
        int x = 0;
        
        // HashSet 선언 (중복 자동제거)
        HashSet<String> set = new HashSet<String>();
        
        for(int i=0; i<dirs.length(); i++)
        {
            y = nowY;
            x = nowX;

            if(dirs.charAt(i)=='U' && y<=4) // ↑ 방향으로 움직일 때
            {
                nowY++;
            }
            if(dirs.charAt(i)=='D' && y>=-4) // ↓방향으로 움직일 때
            {
                nowY--;
            }
            if(dirs.charAt(i)=='L' && nowX>=-4) // ←방향으로 움직일 때
            {
                nowX--;
            }
            if(dirs.charAt(i)=='R' && nowX<=4) // →방향으로 움직일 때
            {
                nowX++;
            }
            if(x==nowX && y==nowY) // 움직이지 않을 때(예외처리)
            {
                continue;
            }
            
            // 이동 전 좌표와 이동 후 좌표를 모두 엮어서 set에 삽입
            String OldToNew = y + "" + x + "" + nowY + "" + nowX + "";
            String NewToOld = nowY + "" + nowX + "" + y + "" + x + "";

            set.add(OldToNew);
            set.add(NewToOld);
        }
        
        // 좌표 2개를 모두 넣어줬기 때문에 /2 후 결과 리턴
        return set.size()/2;
    }
}

 

반응형

댓글