[Algorithm] 99클럽 코테 스터디 12일차 TIL BOJ 1501

김성은·2025년 2월 4일

항해 99 TIL

목록 보기
12/22
post-thumbnail

문제

https://www.acmicpc.net/problem/1501

풀이

문제 분석

  • 입력받은 2차원 배열을 탐색하여 그 위치로부터 최대길이까지 늘려가며 꼭짓점의 값이 같으면서 넓이가 최대가 되는 순간을 모두 확인하여 정답을 구했다
  • 문제에 주어진 그대로 코드로 옮기면 쉽게 풀 수 있는 문제였던 것 같다
  • 유형을 완전탐색으로 잘 분류해서 한 번에 맞추었다 :)

코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[][] board = new int[N][M];
        int S = 0;

        for (int i = 0; i < N; i++) {
            String line = br.readLine();
            for (int j = 0; j < M; j++) {
                board[i][j] = line.charAt(j) - '0';
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                for(int k=0 ; k < Math.min(N - i, M - j); k++) {
                    int a = board[i][j];
                    int b = board[i+k][j];
                    int c = board[i][j+k];
                    int d = board[i+k][j+k];
                    if (a==b & b==c & c==d) {
                        S = Math.max(S, (k+1)*(k+1));
                    }
                }
            }
        }
        bw.write(String.valueOf(S));
        bw.flush();
        bw.close();
    }
}

TIL

  • 입력값을 받을 때 항상 split을 사용했었는데, StringTokenizer를 사용하여 코드를 더 간결하게 작성할 수 있도록 노력해야겠다
  • 특히 StringTokenizer를 사용함으로써 String[] 배열을 따로 만들지 않아도되서 더 좋은 것 같다
profile
백엔드 개발자가 되고 싶은 눈송이입니다

0개의 댓글