백준 15894번: 수학은 체육과목 입니다

레곤토르닉·2025년 8월 19일
0

BaekJoon

목록 보기
54/64
post-thumbnail

백준 15894번: 수학은 체육과목 입니다

가장 아랫부분의 정사각형 개수가 N개일 때, 특정 규칙으로 쌓인 도형의 전체 둘레 길이를 구하는 문제입니다. 복잡해 보이는 도형에서 간단한 수학적 규칙을 찾아내는 패턴 인식 능력과, 큰 수에 대한 자료형 선택이 핵심입니다.


✅ 문제 개요

항목내용
문제 번호15894번 - 수학은 체육과목 입니다
난이도브론즈 3
핵심 알고리즘수학, 구현

✅ 문제 설명 요약

  • 입력: 첫째 줄에 가장 아랫부분에 놓인 정사각형의 개수 n이 주어집니다. (1 ≤ n ≤ 1,000,000,000)
  • 출력: 그림과 같은 도형의 둘레의 길이를 출력합니다.
  • 규칙:
    • 한 변의 길이가 1인 정사각형으로 이루어져 있습니다.
    • 가장 아랫부분의 정사각형 개수가 n개이면, 전체 구조는 n x n 크기의 정사각형을 기반으로 합니다.

✅ 풀이 전략

이 문제는 N이 클 경우 도형을 직접 시뮬레이션할 수 없으므로, N이 작을 때의 예시를 통해 일반적인 규칙을 찾는 것이 가장 효과적입니다.

1️⃣ 패턴 찾기 (N이 작을 경우)

  • N = 1:
    • 1x1 정사각형 하나만 존재합니다.
    • 둘레는 1 + 1 + 1 + 1 = 4 입니다.
  • N = 2:
    • 아랫변 2, 왼쪽 변 2, 오른쪽 변 2, 윗변(계단 모양) 2
    • 둘레는 2 + 2 + 2 + 2 = 8 입니다.
  • N = 3:
    • 아랫변 3, 왼쪽 변 3, 오른쪽 변 3, 윗변(계단 모양) 3
    • 둘레는 3 + 3 + 3 + 3 = 12 입니다.

2️⃣ 규칙성 분석 및 공식화

  • 위 예시에서 다음과 같은 규칙을 발견할 수 있습니다.
    • N=1 일 때 둘레는 4 (4 * 1)
    • N=2 일 때 둘레는 8 (4 * 2)
    • N=3 일 때 둘레는 12 (4 * 3)
  • 이를 일반화하면, 둘레 = 4 * N 이라는 매우 간단한 공식을 얻을 수 있습니다.

3️⃣ 공식 증명 (시각화)

  • 4 * N이 될까요? 도형의 각 변을 살펴보면 쉽게 이해할 수 있습니다.
    • 아랫변의 총 길이: 가장 아래에 놓인 정사각형 N개의 아랫변 길이의 합이므로 N입니다.
    • 왼쪽 변의 총 길이: 가장 왼쪽에 놓인 정사각형 N개의 왼쪽 변 길이의 합이므로 N입니다.
    • 오른쪽 변의 총 길이: 가장 오른쪽에 놓인 정사각형 N개의 오른쪽 변 길이의 합이므로 N입니다.
    • 윗변의 총 길이: 계단 모양이지만, 각 단의 윗변 길이를 모두 합하면 결국 가장 아랫단의 너비와 같은 N이 됩니다.
  • 따라서, 전체 둘레는 N + N + N + N = 4 * N 입니다.

4️⃣ 자료형 선택

  • 입력 n의 최댓값은 10억입니다.
  • 둘레는 4 * n 이므로, 최댓값은 4 * 10억 = 40억이 됩니다.
  • Java에서 int 자료형의 최댓값은 약 21억이므로, 40억을 저장하기에는 부족합니다.
  • 따라서, 입력 n과 결과값을 저장할 변수는 반드시 long 타입으로 선언해야 합니다.

✅ Java 코드 예제

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 * nint의 표현 범위를 넘어서므로, 반드시 long 타입을 사용해야 오버플로우 없이 정답을 맞힐 수 있습니다.
규칙 찾기복잡해 보이는 도형 문제일수록, N=1, 2, 3 정도의 작은 케이스를 직접 그려보면 규칙이 쉽게 보이는 경우가 많습니다.
단순성이 문제는 복잡한 반복문이나 알고리즘이 아닌, 간단한 수학적 규칙만 찾으면 O(1)에 해결되는 문제입니다. 너무 어렵게 생각하지 않는 것이 중요합니다.
입력입력이 숫자 하나이므로 간단하게 br.readLine()으로 읽어 long으로 파싱하면 됩니다.

📝 마무리 요약

✔️ 작은 N에 대한 예시를 통해 규칙을 찾는 것이 문제 해결의 시작입니다.
✔️ 도형의 둘레는 아랫변(N), 윗변(N), 왼쪽 변(N), 오른쪽 변(N)의 합으로 구성됩니다.
✔️ 따라서 최종 공식은 매우 간단하게 4 * N입니다.
✔️ 입력값의 범위가 크므로, 결과가 int 범위를 넘어설 수 있다는 점을 고려하여 long 자료형을 사용해야 합니다.

profile
기록은 나의 무기, 원칙은 나의 방패

0개의 댓글