Notice
Recent Posts
Recent Comments
Link
책 읽다가 코딩하다 죽을래
[JAVA] 백준 2292번 : 벌집 문제 풀이 본문
위 문제의 정답이다.
코드에 대해 설명하기 전에 일단 이 문제에 규칙부터 알아가야한다.
빨간 선은 1을 중심으로 해서 각각의 두께를 나타낸 것이며, 파란색 원은 그 두께에서 가장 큰 수를 나타낸 것이다.
1번부터 N번 방까지 최소 몇개의 방을 지나는 것을 알기 위해서는 일단 각각의 두께마다 가장 큰 수가 몇인지를 알아야한다.
첫번째 두께는 1이 가장 큰 수이다.
두번째 두께는 7이 가장 큰 수이다.
세번째 두께는 19가 가장 큰 수이다.
네번째 두께는 37이 가장 큰 수이다.
다섯번째는 61이 가장 큰 수이다.
1 -> 7 -> 19 -> 37 -> 61 -> ... 로 점점 수가 커진다.
이 수열의 규칙은 다음과 같다.
1 -> 1 + 6 -> 1+ 6 + 12 -> 1+ 6 + 12 + 18 -> 1+ 6 + 12 + 18 + 24 -> ...
이런 식으로 1부터 시작해서 6의 배수만큼 계속 더해져 나가는 것이다.
N의 값이 주어지면
1에 속하면 1 개의 방만 지나가면 된다.
(1+1) ~ (1+6)에 속하면 2 개의 방만 지나가면 된다.
(1+6+1) ~ (1+6+12)에 속하면 3 개의 방만 지나가면 된다.
(1+6+12+1) ~ (1+6+12+18)에 속하면 4 개의 방만 지나가면 된다.
(1+6+12+18+1) ~ (1+6+12+18+24)에 속하면 5 개의 방만 지나가면 된다.
이런 규칙이 존재하는 것이다.
이런 규칙을 기반으로 코드를 짜면 이런 식으로 나온다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int output = 1, compare = 1;
while(compare < N) {
compare += (output * 6);
output++;
}
System.out.println(output);
}
}
'코딩 > 알고리즘문제' 카테고리의 다른 글
[프로그래머스] 피보나치 수 JS (0) | 2021.11.04 |
---|---|
백준 파이썬 1874번 : 스택 수열 (0) | 2021.08.15 |
[JAVA] 백준 10250번 : ACM 호텔 문제 풀이 (0) | 2021.01.06 |
백준 1110번 더하기 사이클 문제 해답 (0) | 2020.10.26 |
백준 11502 세 개의 소수 문제 해답 (0) | 2020.03.19 |