본문 바로가기
프로그래밍/백준알고리즘

백준 알고리즘 2292번 문제 풀이 - 벌집

by 밍구몬 2019. 8. 1.

 

육각형을 이루어진 벌집에서 N번째 벌집으로 가기위해 몇개의 방을 지나쳐야 하는지 푸는 문제입니다.

이 문제를 풀기 위하여 일정하게 증가하는 값이 있는지 찾아 보았습니다.

 

육각을 기준으로 하여 

첫 번째는 방이 1개

두 번째는 방이 7개   (안쪽을 제외하고 겉에 있는 방의 갯수는 6개)

세 번째는 방이 19개  (안쪽을 제외하고 겉에 있는 방의 갯수는 12개)

네 번째는 방이 37개  (안쪽을 제외하고 겉에 있는 방의 갯수는 18개)

방의 갯수가 6의 배수만큼 증가하는 것을 볼 수 있습니다.

 

1번 방에 가려면 1개의 방을 지나면 되고,

2~7 사이에 있는 방으로 가려면 두번,

8~19 사이에 있는 방으로 가려면 세번만 이동하면 됩니다.

 

tmp값을 1로주고, 1씩 증가하는 변수 i를 만들어 준 뒤

tmp+( 6 * i )의 값이 N보다 작거나 같으면 i의 값을 출력해 줍니다.

 

자바

import java .util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int N = s.nextInt();
		int tmp = 1,i=0;
		
		while(true){
			tmp+=6*i;
			i++;
			if(tmp>=N) {System.out.println(i);break;}
		}
	}
}

 

C언어

#include <stdio.h>
int main() {
    int N,tmp = 1,i=1;
    scanf("%d", &N);
    while(1){
        if(N<=tmp){
            printf("%d",i);
            break;
        }
        tmp+=6*i;
        i++;
    }
    return 0;
}