[작성일: 2023. 09. 21]
https://www.acmicpc.net/problem/2292
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int honey = 1; // 현재 범위의 마지막 방(1, 7, 19 ...)
int count = 1; // 방 카운트
int increase = 6; // 지나야 하는 방의 수(6의 배수)
while (num > honey) {
honey += increase;
increase += 6;
count++;
}
System.out.println(count);
}
}
이 문제를 패턴을 찾는 것이 중요하다.
1 : 1번 (1개)
2 ~ 7 : 2번 (6개)
8 ~19 : 3번(12개)
20 ~ 37 : 4번(18개)
38 ~ 61 : 5번(24개)
...
각 층마다 지나가야 하는 방의 수는 6의 배수로 증가하고 있는 것을 알 수 있다.
현재 범위의 마지막 방(1, 7, 19, 37, 61...등), 출력할 방 카운트, 지나야 하는 방의 수(6의 배수)가 필요하다.
입력받은 num이 honey보다 크다면 if문이 실행될텐데,
honey는 increase를 누적할 것이다. 그 밑에서 increase를 6씩 계속 누적해주고 있기 때문에 honey는 6, 12, 18 이런 식으로 누적된다.
if문이 돌 때마다 count가 증가하기 때문에 count로 몇 번의 방을 지나야하는지 알 수 있다.