백준 평면 분할

KIMYEONGJUN·2026년 4월 18일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에 그릴 수 있는 직선의 개수의 최댓값을 의미하는 자연수 N이 주어진다.

첫 번째 줄에 최대 몇 개의 영역으로 분할할 수 있는지 그 개수를 출력한다.

내가 이 문제를 보고 생각해본 부분

입력 처리: BufferedReader로 정수 n(직선 개수)을 받아온다.
몫과 나머지 계산: d = n / 3은 3개의 기울기로 균등 분할하기 위한 몫, m = n % 3은 나머지 갯수이다.
영역 계산:
시작 영역은 1개이다.
직선 하나가 추가될 때마다 최소 1개의 영역이 더 만들어지므로 + n을 한다.
(n * n - d^2 * (3 - m) - (d + 1)^2 * m)/2 부분은 직선들이 서로 교차하여 증가하는 영역 개수를 나타낸다. 
이 수식은 직선들을 세 그룹으로 균등 배분했을 때의 교차점 수와 추가 영역을 계산한 형태이다.
출력: 최대 영역 수 r을 출력한다.
자원 해제: 입출력 스트림을 닫아준다.

코드로 구현

package baekjoon.baekjoon_34;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

// 백준 18187번 문제
public class Main1361 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        int d = n / 3;
        int m = n % 3;
        int r = 1 + n + (n * n - d * d * (3 - m) - (d + 1) * (d + 1) * m) / 2;

        bw.write(Integer.toString(r));
        br.close();
        bw.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글