티스토리 뷰
728x90
문제
- 육각형으로 이루어진 벌집에는 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매김
- 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지 출력
- 시작과 끝 방을 포함한 개수를 출력
해결방법
문제에 주어진 그림을 보면 어렵지 않게 규칙을 찾을 수 있다. 중앙에 위치한 1은 통과해야 하는 벌집의 개수가 1개이고, 그 다음 6개의 벌집은 2개를 통과해야 하고, 그 다음 12개의 벌집은 3개를 통과해야 한다. 즉, 통과해야 하는 벌집의 개수가 1개씩 늘어날 때마다 위치할 수 있는 벌집은 6개씩 늘어나는 것을 알 수 있다.
코드
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 1; // 통과해야 하는 벌집의 개수
int last = 1; // 위치할 수 있는 벌집의 주소 범위 중 가장 큰 값
while(true){
if(N == 1){ // 중앙에 위치한 1은 1개만 지남
System.out.println(1);
break;
}
else { // 위치할 수 있는 벌집의 주소 범위 사이의 값을 계산
if(N >= last + 1 && N <= last + count * 6){
System.out.println(count + 1); // 해당 범위 내에 있다면 통과해야 하는 벌집 개수 출력
break;
}
last = last + count * 6; // 위치할 수 있는 벌집의 주소 범위 중 가장 큰 값
count++; // 통과해야 하는 벌집의 개수 증가
}
}
br.close();
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2751번 수 정렬하기 2(JAVA) (0) | 2022.07.18 |
---|---|
[백준] 2609번 최대공약수와 최소공배수(JAVA) (0) | 2022.07.18 |
[백준] 2231번 분해합(JAVA) (0) | 2022.07.17 |
[백준] 2164번 카드2(JAVA) (0) | 2022.07.17 |
[백준] 2108번 통계학(JAVA) (0) | 2022.07.14 |
댓글