코딩테스트/백준

[백준 JAVA] 2536 - 색종이

kittae 2024. 11. 27. 14:16

문제 해석을 제외하면 구현 자체는 쉬운 문제였다.

 

수학 문제만 보면 울렁증이 올라와 이해가 안 되어 GPT를 통해 문제 해석을 봐버렸다,, 

 

문제를 해석해보니 구현 자체는 매우 쉬웠다. 또한 총배열의 개수가 100*100이기 때문에 시간초과와 메모리 제한은 상관없다고 판단했다!

 

나의 구현 로직 설명이다.

각 좌표의 값을 받아 해당 배열을 기준으로 10*10을 boolean으로 표시
입력값에 띄어쓰기가 있으니 StringTokenizer 사용
중복되면 continue
마지막에 처음부터 끝까지 ture일때 count++

 

[최종코드]

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        boolean[][] arr = new boolean[100][100];
        int num = Integer.parseInt(br.readLine());
        int count = 0;

        for (int i = 0; i < num; i++) {

            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int row = Integer.parseInt(st.nextToken());
            int col = Integer.parseInt(st.nextToken());

            for (int j = row; j < row + 10; j++) {

                if (j > 100)
                    continue;
                for (int k = col; k < col + 10; k++){

                    if (k > 100 || arr[j][k] == true)
                        continue;

                    arr[j][k] = true;
                }
            }
        }

        for (int i = 0; i < 100; i++) {
            for (int j = 0; j < 100; j++) {

                if (arr[i][j] == true)
                    count++;
            }
        }

        System.out.println(count);
    }
}

 

배운점

문제를 풀면서 나는 기존 문제에선 Boolean형식 즉, 참조 형식으로 선언 후 false를 초기화하는 방식으로 많이 풀었었는데, 알고 보니 boolean(기본형)으로 초기화하면 기본적으로 false로 초기화된다는 것이었다!

 

그리고 항상 5분 정도 문제 해석하고 안되면 타인 해석을 찾아보곤 하는데, 해석 시간을 늘려 문제 해석 능력을 키워야겠다고 생각했다!