(Java) 프로그래머스 - 방문 길이

2022. 9. 21. 05:27·코딩 테스트

많이 보던 탐색 문제여서 금방 해결할 수 있을 것 같았는데 시간이 좀 걸렸다.

좌표로 접근하여 위, 아래, 왼쪽, 오른쪽을 전부 체크해야 했는데 처음에는 Map을 이용하려고 했지만

실패했다. 3차원 배열을 쓰기 싫어서 다른 방법으로 시도해봤지만 실패하고 결국 3차원 배열을 이용해서 풀었다.

 

로직은 좌표가 -5부터 5까지의 범위임으로 배열크기를 11로 설정한다.

x, y의 좌표를 5,5에서 호출해야 0,0과 같으므로 경로 탐색 메서드의 매개변수를 5,5 로 설정한다.

그리고 dirs을 순회하며 움직이는데 범위를 벗어나는지 체크하고 방향을 체크한다.

처음으로 방문한 경로라면 answer를 증가시키고 이동한다.


 

최종 코드

import java.util.*;
class Solution {
    static int answer;
    public int solution(String dirs) {
        answer = 0;

        // 3차원 배열을 통해 경로 체크
        int[][][] visited = new int[11][11][4];

        search(dirs, 5, 5, visited);
        
        return answer;
    }
    static void search(String dirs, int x, int y, int[][][] visited) {
        String[] temp = dirs.split("");
        for (int i = 0; i < temp.length; i++) {
            switch (temp[i]) {
                // 경로가 위라면
                case "U":
                    // 범위를 벗어나면
                    if (x + 1 >= 11) {
                        continue;
                    }
                    // 위에서 아래로 오는것과 아래에서 위로 가는건 같은 경로
                    if (visited[x][y][0] == 0) {
                        visited[x][y][0] = 1;
                        visited[x + 1][y][1] = 1;
                        answer++;
                    }
                    // 움직이기
                    x += 1;
                    break;
                case "D":
                    if (x - 1 < 0) {
                        continue;
                    }
                    if (visited[x][y][1] == 0) {
                        visited[x][y][1] = 1;
                        visited[x - 1][y][0] = 1;
                        answer++;
                    }
                    x -= 1;
                    break;
                case "R":
                    if (y + 1 >= 11) {
                        continue;
                    }
                    if (visited[x][y][2] == 0) {
                        visited[x][y][2] = 1;
                        visited[x][y + 1][3] = 1;
                        answer++;
                    }
                    y += 1;
                    break;
                case "L":
                    if (y - 1 < 0) {
                        continue;
                    }
                    if (visited[x][y][3] == 0) {
                        visited[x][y][3] = 1;
                        visited[x][y - 1][2] = 1;
                        answer++;
                    }
                    y -= 1;
                    break;
            }
        }
    }
}
저작자표시

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - 방금그곡  (0) 2022.09.26
(Java) 프로그래머스 - 쿼드 압축 후 개수 세기  (0) 2022.09.23
(Java) 프로그래머스 - n진수 게임  (0) 2022.09.19
(Java) 프로그래머스 - 압축  (0) 2022.09.17
(Java) 프로그래머스 - n^2 배열 자르기  (0) 2022.09.15
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - 방금그곡
  • (Java) 프로그래머스 - 쿼드 압축 후 개수 세기
  • (Java) 프로그래머스 - n진수 게임
  • (Java) 프로그래머스 - 압축
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 방문 길이
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.