• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

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

23.12.11 12:37 작성 조회수 125

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(); } }  

답변 1

답변을 작성해보세요.

0

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 라고 가정하고 사용해도 큰 문제는 없어서 이해하기 쉬우시도록 코드는 하나로 통일했습니다 ㅎㅎ

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

fancy님의 프로필

fancy

질문자

2023.12.12

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

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