개발자-H 입니다.

구름 - 길찾기 (다이아몬드) 본문

Algorithm/문제 풀이

구름 - 길찾기 (다이아몬드)

개발자-H 2021. 8. 8. 15:02

https://level.goorm.io/exam/43145/%EA%B8%B8%EC%B0%BE%EA%B8%B0-%EB%8B%A4%EC%9D%B4%EC%95%84%EB%AA%AC%EB%93%9C/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io

  • 그래프 탐색 문제이다.
  • 입력 형식이 다소 난해 했다.
  • DFS로 완전 탐색하였다.
  • 다이아몬드의 마지막 지점에서 경로를 출력했으며 전역변수로 갱신했다.
  • 다른 사람 풀이 보면 DFS 함수에서 바로 경로 리턴하는 방식이 있었다. 코드가 깔끔한거 같기도.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    public static int maximumPath = -1;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int[][] map = new int[1001][1001];

        for (int i = 1; i <= (N - 1) * 2 + 1; i++) {
            String[] s = br.readLine().split(" ");
            for (int j = 0; j < s.length; j++) {
                map[i][j + 1] = Integer.parseInt(s[j]);
            }
        }

        dfs(1, 1, map, N, 1, 0);
        System.out.println(maximumPath);
    }

    private static void dfs(int r, int c, int[][] map, int N, int depth, int sum) {
        if (r > map.length) return;
        if (c > map[r].length) return;

        Integer node = map[r][c];
        sum += node;

        if (r == (N - 1) * 2 + 1 && c == 1) {
            maximumPath = Math.max(maximumPath, sum);
            return;
        }

        if (depth < N) {
            if (map[r + 1][c] != 0) {
                dfs(r + 1, c, map, N, depth + 1, sum);
            }

            if (map[r + 1][c + 1] != 0) {
                dfs(r + 1, c + 1, map, N, depth + 1, sum);
            }
        } else {
            if (map[r + 1][c] != 0) {
                dfs(r + 1, c, map, N, depth + 1, sum);
            }

            if (map[r + 1][c - 1] != 0) {
                dfs(r + 1, c - 1, map, N, depth + 1, sum);
            }
        }

    }
}

 

'Algorithm > 문제 풀이' 카테고리의 다른 글

프로그래머스 - 숫자 문자열과 영단어  (0) 2021.08.08
프로그래머스 - 포멧몬  (0) 2021.08.08
LeetCode - FloodFile  (0) 2021.08.07
BOJ - 섬의 개수 (4963)  (0) 2021.08.07
BOJ - 단지번호붙이기 (2667)  (0) 2021.08.07
Comments