강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

dnrwls9115님의 프로필 이미지
dnrwls9115

작성한 질문수

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

점프왕 쩰리 (Small) (백준 16173)

dfs 부문을 이렇게 작성해도 되나요?

해결된 질문

작성

·

12

·

수정됨

1

import java.util.*;
import java.io.*;

public class jelly {

    static int size;
    static int[][] map;
    static boolean[][] visited;
//    //size,size도달하면 HaruHaru, 아니면 hing

    public static void dfs(int y, int x){
        visited[y][x] = true;
        if(y == size && x == size) return;
        int n = map[y][x];
        if( (x + n) <= size && !visited[y][x+n])  dfs(y,x+n);
        if( (y + n) <= size && !visited[y+n][x])  dfs(y+n,x);
    }



    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        size = Integer.parseInt(br.readLine());
        int Max = size +10;

        map = new int[Max][Max];
        visited = new boolean[Max][Max];

        for(int i = 1; i <= size; i ++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j = 1; j <= size; j ++){
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        dfs(1,1);

        if(visited[size][size]){
            System.out.print("HaruHaru");
        }else  System.out.print("Hing");

        bw.close();
        br.close();
    }
}

답변 1

0

네, 잘 작성하셨습니다. DFS 코드는 문제 없이 정상적으로 동작합니다.

 

차이점을 이미 잘 아시겠지만 정리하자면:

 

  • 제 코드(ver 1): 이동할 방향(dirY, dirX)을 배열로 정의하고, for문으로 상하좌우를 탐색합니다. 이 방식은 이동 가능한 방향이 많을 때 코드를 간결하게 작성할 수 있습니다.

  • 작성하신 코드: if문을 사용해 아래(y + n)와 오른쪽(x + n) 방향을 각각 따로 확인하고 있습니다. 이 방법도 문제에서는 동일하게 동작하고, 오히려 더 직관적으로 이해하기 쉽습니다.

 

 

두 방식 모두 visited 배열을 활용하기 때문에 논리적으로 완벽하며, 결과에도 차이는 없습니다.

dnrwls9115님의 프로필 이미지
dnrwls9115

작성한 질문수

질문하기