오랫만에 DFS를 풀 때 마다 겪는 흔한 실수들
포스트
취소

오랫만에 DFS를 풀 때 마다 겪는 흔한 실수들

DFS 문제를 오랫만에 풀면 자잘한 실수들을 하게된다. 그 시간이 아까워서 포스팅 해두려고 한다.

1. X, Y좌표

1
2
3
4
5
6
7
int[][] map = new int [size][size];

for (int y = 0; int y < size; y++) {
    for (int x = 0; int x < size; x++) {
        int[][] map = new int[y][x];
    }
}
  • int[][] map = new int[y][x];
    • new int[x][y] 로 자주 실수함. (new int[j][i] 도 마찬가지)

 

2. 아스키코드

map 정보를 입력받을 때 한 열을 1 2 3 1 5가 아닌 12315 따위로 받을 경우

1
2
3
4
5
6
7
for (int y = 0; y < size; y++) {
    String row = br.readLine();
    for (int x = 0; x < size; x++) {
    //  map[y][x] = row.charAt(x);
        map[y][x] = row.charAt(x) - 48; // good
    }
}        

int형인 map에 1을 저장할 경우 1이 아닌 49로 저장됨.

1
2
int one = '1';
System.out.println(one); // 49

아스키코드의 49가 숫자 1이기 때문. 그래서 48을 빼줘야 한다.

12315를 배열로 받는 다른 방법도 있을 것 같은데 찾아보지 않았다.

 

3. tc 초기화

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Solution {
    final static int SIZE = 5;

    static int[][] map = new int[SIZE][SIZE];
    static int visited = new boolean[SIZE][SIZE];
    static int result = 0;

    public static void main(String[] args) throws IOException {
        final int TC = 10;

        for (int tc = 1; tc <= TC; tc++) {
            //...
        }

        System.out.println(result);
    }
}

전역으로 map, visited, result를 선언과 동시에 초기화를 했다.

문제는 tc 한번 돌고나면 다음 tc를 수행할 때, 이전에 사용했던 데이터들(map, visited, result)이 초기화 되지 않는다. visited와 result는 이전의 tc에 영향을 받는다는 것.

따라서 tc가 시작할 때 마다 아래처럼 초기화를 해주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Solution {
    final static int SIZE = 5;

    static int[][] map;
    static int visited;
    static int result;

    public static void main(String[] args) throws IOException {
        final int TC = 10;

        for (int tc = 1; tc <= TC; tc++) {
            map = new int[SIZE][SIZE];
            visited = new boolean[SIZE][SIZE];
            result = 0;
            //...
        }

        System.out.println(result);
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

자바 문자열 equals 구현

Java 퀵소트 구현

Comments powered by Disqus.