가장 아랫부분의 정사각형 개수가 N개일 때, 특정 규칙으로 쌓인 도형의 전체 둘레 길이를 구하는 문제입니다. 복잡해 보이는 도형에서 간단한 수학적 규칙을 찾아내는 패턴 인식 능력과, 큰 수에 대한 자료형 선택이 핵심입니다.
항목 | 내용 |
---|---|
문제 번호 | 15894번 - 수학은 체육과목 입니다 |
난이도 | 브론즈 3 |
핵심 알고리즘 | 수학, 구현 |
n
이 주어집니다. (1 ≤ n ≤ 1,000,000,000)n
개이면, 전체 구조는 n x n
크기의 정사각형을 기반으로 합니다.이 문제는 N이 클 경우 도형을 직접 시뮬레이션할 수 없으므로, N이 작을 때의 예시를 통해 일반적인 규칙을 찾는 것이 가장 효과적입니다.
1 + 1 + 1 + 1 = 4
입니다.2 + 2 + 2 + 2 = 8
입니다.3 + 3 + 3 + 3 = 12
입니다.4 * 1
)4 * 2
)4 * 3
)4 * N
이라는 매우 간단한 공식을 얻을 수 있습니다.4 * N
이 될까요? 도형의 각 변을 살펴보면 쉽게 이해할 수 있습니다.N
개의 아랫변 길이의 합이므로 N
입니다.N
개의 왼쪽 변 길이의 합이므로 N
입니다.N
개의 오른쪽 변 길이의 합이므로 N
입니다.N
이 됩니다.N + N + N + N = 4 * N
입니다.n
의 최댓값은 10억입니다.4 * n
이므로, 최댓값은 4 * 10억 = 40억
이 됩니다.int
자료형의 최댓값은 약 21억이므로, 40억
을 저장하기에는 부족합니다.n
과 결과값을 저장할 변수는 반드시 long
타입으로 선언해야 합니다.import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
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));
// n의 범위가 10억이므로 long 타입으로 입력받아야 함
long n = Long.parseLong(br.readLine());
// 둘레는 4 * n 이므로, 결과도 long 타입으로 처리
long perimeter = 4 * n;
bw.write(String.valueOf(perimeter));
bw.flush();
bw.close();
br.close();
}
}
항목 | 설명 |
---|---|
자료형 범위 | 이 문제의 가장 중요한 함정입니다. n 이 10억일 때 4 * n 은 int 의 표현 범위를 넘어서므로, 반드시 long 타입을 사용해야 오버플로우 없이 정답을 맞힐 수 있습니다. |
규칙 찾기 | 복잡해 보이는 도형 문제일수록, N=1, 2, 3 정도의 작은 케이스를 직접 그려보면 규칙이 쉽게 보이는 경우가 많습니다. |
단순성 | 이 문제는 복잡한 반복문이나 알고리즘이 아닌, 간단한 수학적 규칙만 찾으면 O(1)에 해결되는 문제입니다. 너무 어렵게 생각하지 않는 것이 중요합니다. |
입력 | 입력이 숫자 하나이므로 간단하게 br.readLine() 으로 읽어 long 으로 파싱하면 됩니다. |
✔️ 작은 N에 대한 예시를 통해 규칙을 찾는 것이 문제 해결의 시작입니다.
✔️ 도형의 둘레는 아랫변(N), 윗변(N), 왼쪽 변(N), 오른쪽 변(N)의 합으로 구성됩니다.
✔️ 따라서 최종 공식은 매우 간단하게 4 * N
입니다.
✔️ 입력값의 범위가 크므로, 결과가 int
범위를 넘어설 수 있다는 점을 고려하여 long
자료형을 사용해야 합니다.