백준 2292번 벌집 풀이

육각형의 벌집에서 번호를 매기고 1번 방부터 그 번호로 가는데 거쳐야 하는 방의 최소 개수를 구하는 문제.

 

풀이

일단 기본적으로 이동한 방의 개수는 1개부터 시작이다. 그 이유는 1번부터 시작이기에 이미 방을 1개 거쳤기 때문. 예제를 잃어보면 1번방을 지나간 방으로 친다는걸 알 수 있다.

 

n개의 방을 이동했을때 갈 수 있는 방을 정리해보았더니

 

n=1.   1   1개. 

n=2. 2,3,4,5,6,7.  6개 

n=3  8,9,10,11,12,13,14,15,16,17,18,19. 12개

n=4. 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37.  18개

n=5. 38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61  24

.

.

.

 

같이 나왔다. 어떤 규칙성이 보이지 않는가? n개의 방을 이동했을때 이동 할 수 있는 방의 개수는 (n-1)*6이란걸 알 수 있다.(1은 제외).

그러면 특정방까지의 최소 경로는 어떻게 알아내는가?

n단계에서의 최소인 수와 최대의 수 사이에 알아내려는 방 번호가 있다면 그 단계가 최소경로일 것이다.

import java.util.Scanner;

public class Main {
	public static long calculate(long n) {
		int floor=1;
		int countFloor=1;
		long max=1,min=1;
		while(true) {
			if(n==1)
				return 1;
			else {
				min=countFloor+min;
				countFloor=floor*6;
				max=min+countFloor-1;
				if(n>=min && n<=max) {
					return floor+1;
				}
				else {
					floor++;
				}
			}
		}
		
	}
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		long n;
		n=scanner.nextLong();
		int answer=(int) calculate(n);
		System.out.println(answer);
	}
}

'Algorithm > 백준' 카테고리의 다른 글

백준 4948 베르트랑 공준  (0) 2021.02.19
백준 1929번 소수 구하기  (0) 2021.02.19
백준 11653번 소인수분해  (0) 2021.02.19
백준 2869번 달팽이는 올라가고 싶다.  (0) 2020.12.09
백준 1193번 분수찾기 풀이  (0) 2020.11.01