강의

멘토링

로드맵

Inflearn brand logo image

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

dnrwls9115님의 프로필 이미지
dnrwls9115

작성한 질문수

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

침투 (백준 13565)

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

작성

·

9

0

일반적으로 수학 좌표계로 생각하면 (2,3) 이라했을때 x축이 2, y축이 3이지만

 

우리는 맵이나 2차원 리스트로 생각하게됐을떄

array[row][col]이여서 이게 반대가되고, 그래프로 치면 정점에 간선이 연결된거기 때문에 이러는것 같은데

 

 graph[y+1][x+1] = true;

지난 배추문제부터 이런건 이해가 가는데

 

static int[] dirY = {-1, 1, 0, 0};
    static int[] dirX = {0, 0, -1, 1};



    static void dfs(int y, int x){
        visited[y][x] = true;
        for(int i = 0; i < 4; i ++){
            int newY = y + dirY[i];
            int newX = x + dirX[i];
            if(graph[newY][newX] && !visited[newY][newX]) dfs(newY,newX);
        }
    }

 

 

이게 너무 이해안갑니다. 그냥 파라미터도 x, y로 하고 visited[x][y] , dirX = {-1,1,0,0} dirY = {0,0,-1,1} 이렇게 하면 안되나요? 생각하기가 너무 복잡해요

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

배열 처리와 관련된 x, y 순서에 대한 질문에 대해 직접 이해하기 어려울 수 있는 점 공감합니다. 알고리즘 문제를 풀 때, 특히 2차원 배열을 다룰 때 혼란이 생기는 이유 중 하나는 우리가 일상적으로 사용하던 좌표계와 프로그래밍에서 사용되는 방식이 다르기 때문입니다.

일반적으로 수학의 직교 좌표계를 사용할 때, (x, y)로 표시하여 x축은 오른쪽으로, y축은 위쪽으로 증가하는 것으로 이해합니다. 하지만 프로그래밍에서의 2차원 배열은 실제로 행과 열로 구성되며, 배열의 첫 번째 인덱스는 행(head), 두 번째 인덱스는 열(column)을 나타냅니다. 즉, array[row][col] 형식이어서 행(y), 열(x) 순으로 접근합니다.

각 변수의 용도와 기원을 알고 나면 이해가 조금 더 쉬워질 것 같습니다:

  • 배열의 좌표계: 대개, 2차원 배열을 행(row)과 열(column)의 두 차원으로 생각하기에, array[y][x]로 사용하는 것이 일반적입니다. 이는 수학적 좌표계와는 다르지만 컴퓨터 과학에서는 흔한 방식입니다.

  • 이동 방향 배열: dirYdirX는 방향을 지정하는 데 사용하며 예를 들어, dirY[i]는 세로 방향의 이동을, dirX[i]는 가로 방향의 이동을 명시합니다. 이러한 배열을 사용하는 것은 이동할 방향을 쉽게 계산하기 위한 표준적인 방법입니다.

질문있는 경우 관련된 기존 글도 참조해보세요. 이 글에서는 왜 dirYdirX가 현재와 같은 방식으로 되어 있는지, 또 다른 예를 통해 잘 설명되어 있습니다.

제가 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dnrwls9115님의 프로필 이미지
dnrwls9115

작성한 질문수

질문하기