https://www.acmicpc.net/problem/15894
형석이가 말한대로 이 문제에는 어떤 수학적인 트릭이 숨어있을것이다.
n = 1 일 때, 결과는 4이다.
n = 2 일 때, 결과는 8이다.
...
이렇게 일일히 하면 성원이와 다를게 뭔가.
문제를 분석해보자.
n = k 일 때의 결과 값을 x 라고 해보자,
n = k+1 일 때의 결과 값은 무엇일까?
n이 k 에서 k+1 로 증가하면서 어떤 변화가 있었는지 알아보자.
증가되는 요인 (+) :
- k+1 (밑변의 길이)
- 2 (추가된 가장 밑줄의 양 옆 길이)
- 1 (추가된 가장 밑줄과 원래 밑줄 옆으로 삐져나온 길이)
감소되는 요인 (-) :
- k (원래 가장 밑줄)
따라서 n = k+1 일때의 실선의 길이는 x + (k+1) + 2 + 1 - k = x + 4
결과적으로 수학적 귀납법에 의해 n 이 1 증가할때마다 실선의 길이는 4씩 증가함을 알 수 있었다.
하지만 이때 주의할 점이 있다.
만약 N 을 int 타입으로 받는다면 overflow 가 발생할 수 있다.(N <= 10e9)
따라서 N 을 long 타입으로 받아주자.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
long N = Long.parseLong(br.readLine());
System.out.print(4*N);
}
}
- 느낀 점
타입을 int 가 아니라 long 을 받아야 한다는 점을 생각하지 못했다. 타입의 overflow 를 항상 생각하자
'[JAVA] > 자바[JAVA] 백준' 카테고리의 다른 글
BOJ(백준 온라인 저지) 10101번 with 자바[JAVA] (0) | 2024.03.18 |
---|---|
BOJ(백준 온라인 저지) 9063번 with 자바[JAVA] (0) | 2024.03.18 |
BOJ(백준 온라인 저지) 9506번 with 자바[JAVA] (0) | 2024.03.18 |
BOJ(백준 온라인 저지) 2501번 with 자바[JAVA] (0) | 2024.03.18 |
BOJ(백준 온라인 저지) 5086번 with 자바[JAVA] (0) | 2024.03.18 |