[프로그래머스] Lv.2 방문 길이 (Java)

2023. 6. 29. 12:00·Algorithms(CT)/Programmers

https://school.programmers.co.kr/learn/courses/30/lessons/49994

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.

  • U : 위쪽으로 한 칸 가기
  • D : 아래쪽으로 한 칸 가기
  • R : 오른쪽으로 한 칸 가기
  • L : 왼쪽으로 한 칸 가기

캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위 (-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.

예를 들어,  "ULURRDLLU"로 명령했다면

이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다.


💡 풀이 과정

1. 일단 위치 볼 때 -를 고려하지 않기 위해서 (0,0) 위치를 옮겨 (0,0) ~ (10,10)를 범위로 바꿔줍니다.

그럼 시작 위치 또한 (5,5)로 변경됩니다.

 

2. 처음 걸어본 길인지를 확인하기 위해 사분면의 점 위치를 나타내는 boolean 배열을 만들어줍니다.

boolean[][] visited

여기서 길을 방문했는지를 저장하기 위해 점의 네 방향을 확인할 수 있도록 3차원 배열로 만들어 줍니다.

//해당 점의 상하좌우 방문 확인
boolean[][][] wayVisited = new boolean[11][11][4];

// 0:상 1:하 2:우 3:좌

3. 처음 위치에서 시작해, dirs를 수행했을 때의 위치가 0~10을 벗어나지 않으면 dirs를 하나씩 수행합니다.

 

4. 만약 방향이 'U'가 들어오고, 현재 위치에서 윗길을 방문한 적이 없으면,

answer+1 해주고 현재 위치(x,y)의 윗길을 방문처리 해줍니다. [x][y][0]=true;

또한 이동한 지점의 아랫길도 방문 처리를 해줍니다. [x][y+1][1]=true;

그리고 방문한적이 있든 없든 현재 위치를 이동시켜 줍니다. y++;

if(dir=='U' && y+1<=10){
	if(!wayVisited[x][y][0]){ //윗길 방문 한적 없으면
		answer++;
		wayVisited[x][y][0]=true;//(x,y)의 윗길 방문 처리
		wayVisited[x][y+1][1]=true; //(x,y+1) 아랫길 방문 처리
	}
	y++;
}

 

5. 4번 작업을 방향이 'D', 'R', 'L'일 때도 동일하게 처리합니다.

 

6. 모든 dirs를 처리해 준 뒤, 저장된 answer를 return 합니다.


전체 코드

class Solution {
    public int solution(String dirs) {
        int answer = 0;
        
        //- 생각하지 않으려고 사분면 위치를 이동시켜서 (0,0)~(10,10)까지로 범위 변경.
        boolean[][][] wayVisited = new boolean[11][11][4]; // 해당 점의 상하좌우 방문 확인.
        
        int x=5;//처음 위치
        int y=5;
        
        for(int i=0;i<dirs.length();i++){
            int dir=dirs.charAt(i);//방향
            //System.out.print("("+x+","+y+") ->");
            
            if(dir=='U' && y+1<=10){
                if(!wayVisited[x][y][0]){ //윗길 방문 한적 없으면
                    answer++;
                    wayVisited[x][y][0]=true;//(x,y)의 윗길 방문 처리
                    wayVisited[x][y+1][1]=true; //(x,y+1) 아랫길 방문 처리
                }
                y++;
                
            }else if(dir=='D' && y-1>=0){
                if(!wayVisited[x][y][1]){//아랫길 방문 한적 없으면
                    answer++;
                    wayVisited[x][y][1]=true;//(x,y) 아랫길 방문 처리
                    wayVisited[x][y-1][0]=true;//(x,y-1) 윗길 방문 처리
                }
                y--;
                
            }else if(dir=='R' && x+1<=10){
                if(!wayVisited[x][y][2]){//오른쪽길 방문 한적 없으면
                    answer++;
                    wayVisited[x][y][2]=true;//(x,y) 오른쪽 방문 처리
                    wayVisited[x+1][y][3]=true;//(x+1,y) 왼쪽 방문 처리
                }
                x++;
                
            }else if(dir=='L' && x-1>=0){
                if(!wayVisited[x][y][3]){//왼쪽 방문 한적 없으면
                    answer++;
                    wayVisited[x][y][3]=true;//(x,y) 왼쪽 방문 처리
                    wayVisited[x-1][y][2]=true; //(x-1,y) 오른쪽 방문 처리
                }
                x--;
                
            }
            //System.out.println(" ("+x+","+y+") : "+answer);
        }
        
        
        
        return answer;
    }
}

'Algorithms(CT) > Programmers' 카테고리의 다른 글

[프로그래머스]Lv2. 파일명 정렬 (Java)  (0) 2023.06.29
[프로그래머스] Lv.2 스킬트리  (0) 2023.06.29
[프로그래머스] Lv.2 땅따먹기 (Java)  (0) 2023.06.29
[프로그래머스] Lv.3 순위 (Java)  (0) 2023.06.27
[프로그래머스] Lv.4 징검다리 (Java)  (0) 2023.06.26
'Algorithms(CT)/Programmers' 카테고리의 다른 글
  • [프로그래머스]Lv2. 파일명 정렬 (Java)
  • [프로그래머스] Lv.2 스킬트리
  • [프로그래머스] Lv.2 땅따먹기 (Java)
  • [프로그래머스] Lv.3 순위 (Java)
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    인프런
    IT 잡학사전
    노마드코더
    그리디
    Lv.1
    백준
    BOJ
    LV.3
    DP
    코딩테스트
    Greedy
    Til
    DFS
    프로그래머스
    따라하며 배우는 html css
    lv.4
    제대로 파는 자바스크립트
    BFS
    자바
    개발자북클럽
    스택
    존안님
    구름톤 챌린지
    IT 5분 잡학사전
    java
    호텔 대실
    LV.2
    lv2
    구름
    HTML
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스] Lv.2 방문 길이 (Java)
상단으로

티스토리툴바