백준 2292번 : 벌집 [Java]
문제출처
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌��
www.acmicpc.net
import java.util.Scanner;
public class d016_Q2292 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int index = 0;
int ans = 1;
while(N != 1) {
index = index + ans++;
int r = 1 + 6 * index;
if(r >= N) {break;}
}
System.out.println(ans);
sc.close();
}
}
이걸 마지막으로 단계별 풀어보기 수학1의 문제는 다 풀었다,
또 규칙을 먼저 찾으려고 했고
점점 육각형이 커지면서 예를들어 13의 경우 두번째 육각형에 위치하기 때문에 처음 시작점 1을 포함해 정답이 3이다.
입력된 수 N이 몇번째 육각형에 위치하는지 찾으려면 N이 위치한 육각형의 다음 육각형이 시작하는 부분의 수보다 작아야한다.
육각형에서 가장 큰 수를 찾으려면 어떤 규칙으로 육각형이 커지는지 찾으면 되는데
빨강 초록 노랑 파랑 순으로 보면 가장 큰 수가
7, 19, 37, 61 이렇게 늘어나고 있다 식으로 분해를 해보면
1 + (6 * 1)
1 + (6 * 3)
1 + (6 * 6)
1 + (6 * 10)
즉 1 + (6 * a)에서 a가
1
1+2
1+2+3
1+2+3+4
와 같이 늘어난다.
while문을 써서 설마 시간초과가 날까봐 두근두근했는데 다행히 한번에 맞았다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
백준 2581번 : 소수 [Java] (0) | 2020.09.18 |
---|---|
백준 1978번 : 소수 찾기[Java] (0) | 2020.09.17 |
백준 15596번 : 정수 N개의 합 [Java] (0) | 2020.09.16 |
백준 10171번 : 고양이 [Java] (0) | 2020.09.16 |
day13 프로그래머스 (0) | 2020.09.10 |