
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 그릴 수 있는 직선의 개수의 최댓값을 의미하는 자연수 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.