inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Java/Java] Thuật toán DFS mà ngay cả sinh viên giáo dục khai phóng cũng có thể hiểu được! - Giới thiệu

Vua Nhảy Jellie (Nhỏ) (Baekjun 16173)

dfs 매개변수에서 y,x 를 왜 순서를 반대로 쓰셨는지 궁금합니다.

Đã giải quyết

370

devfancy

4 câu hỏi đã được viết

1

점프왕 젤리문제에서 dfs 메서드에 dfs(int x, int y)가 아닌 dfs(int y, int x)인지 궁금합니다!
이전 문제부터 계속 궁금해했는데, 왜 순서를 바꾸셨는지에 대한 명확한 이유를 못찾겠어서 질문올렸습니다.// 점프왕 젤리 import java.util.*; import java.io.*; class Jump_king_jelly { static final int MAX = 3 + 100 + 10; static int map[][]; static boolean visited[][]; static int N; static int dirY[] = {1, 0}; static int dirX[] = {0, 1}; public static void dfs(int y, int x) { visited[y][x] = true; if(y == N && x == N) return; for(int i = 0; i < 2; i++) { int newY = y + dirY[i] * map[y][x]; int newX = x + dirX[i] * map[y][x]; if(visited[newY][newX] == false) { dfs(newY, newX); } } } public static void main(String[] args) throws IOException { // 0. 입력 및 초기화 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); map = new int[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map에 정보 반영 for(int i = 1; i <= N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for(int j = 1; j <= N; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } // 2. dfs 수행 dfs(1,1); // 3. 출력 if(visited[N][N]) bw.write("HaruHaru"); else bw.write("Hing"); bw.close(); br.close(); } }  

java 코딩-테스트 알고리즘 dfs

Câu trả lời 1

0

gaebaljob

kevin님 안녕하세요 🙂

우선 결론부터 말씀드리면 y,x를 쓰거나 x,y를 쓰거나 코드에서 일관되게만 사용한다면 정답을 구하는 데 문제는 없습니다! 그래서 y,x를 쓰셔도 좋고 더 편하시다면 x,y를 쓰셔도 좋은데 통일만 시켜주시면 됩니다 ㅎㅎ

제가 y,x를 쓰게 된 이유는 주로 i, j를 인자로 넘겨주는데, 주로 i가 행의 번호, j가 열의 번호로 사용되기 때문입니다. 이걸 우리가 자주 사용했던 x,y 좌표 체계로 변환하면 y, x가 되기 때문에 y, x라고 썼습니다!

그리고 대부분 문제에서도 이렇게 y, x 기준으로 동작해서 사용한 경우가 많은데, 간혹 x,y 를 기준으로 입력 정보를 주는 경우도 있었던 것 같아요. 이때 맞춰서 x,y 로 바꿔도 되고, 그냥 y, x 라고 가정하고 사용해도 큰 문제는 없어서 이해하기 쉬우시도록 코드는 하나로 통일했습니다 ㅎㅎ

결론적으로 어떤 걸 써도 상관 없으니 원하시는 쪽으로 사용하시면 되고, 제 코드가 직관적이지 못하면 바꿔보시는 것도 코드를 이해하는 데 도움이 될 것 같아요. 혹시 여전히 헷갈리는 부분이 있으시거나 제 설명이 부족했으면 댓글 남겨주세요! 오늘도 공부 화이팅하세요!

1

devfancy

답변해주셔서 정말 감사합니다!
직접 그림으로 그리면서 문제를 풀어보니, 이해가 잘되었습니다~😌

0

gaebaljob

네 감사합니다! 오늘도 공부 하시느라 고생 많으셨습니다 :)

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

1

71

1

x랑 y를 거꾸로 쓰는 개념이 너무 헷갈립니다...

1

94

2

dfs 파라미터에 count를 넣는이유

1

62

2

graph 채울때 for문 설계 질문

1

71

2

질문있습니다.

1

71

1

다른 강의 언제나오나용?

1

92

2

노드간 거리 계산

1

145

1

안녕하세요, 혹시 다른문제도 여쭤볼 수 있을까요?

1

130

1

최근에 올린 질문, 코드블럭으로 공유드립니다!

1

143

1

질문이 있습니다. dfs 메서드에 order를 이렇게 구현하면 안되는 이유가 무엇인가요?

0

133

2

깊이우선탐색2 백준 24480 수업노트에...

1

115

1

백준 24479 문제 제출 결과 "틀렸습니다" 라고만 나와서 어떤 부분이 틀렸는지 잘 모르겠어요 피드백 부탁드립니다

1

249

3

graph 만들때 boolean[][] 으로 만드는 경우랑 int[][] 나 ArrayList<Integer>[] 로 만드는 기준이 어떻게 되나요?

1

201

2

graph를 2차원 배열 또는 List로 하는 기준을 어떤식으로 잡으면 좋을까요...?

1

224

1

강사님 안녕하세요! 깊이 우선 탐색 2 (백준 24480)에서 제공하는 풀이 코드에서 궁금한 점이 있어서 질문 드립니다!

1

325

3

촌수 계산

1

354

3

연결 요소의 개수 (백준 11724)

1

267

1

백준 24479 문제 시간 초과 질문 드려요

1

382

1

백준 실행시 틀립니다.

1

372

1

재귀대신 스택으로 구현하면 안될까요?

1

408

1

안녕하세요 11724번 질문드려요!

2

313

1

출력할 때 BufferedWriter? StringBuilder?

1

508

1

answer++ 위치 질문

1

254

1

code의 어디가 잘못된지 도저히 모르겠습니다..

1

269

1