지구정복

[수학] 백준 - 벌집 본문

데이터 엔지니어링 정복/Algorithm

[수학] 백준 - 벌집

nooh._.jl 2021. 7. 23. 10:54
728x90
반응형

https://www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net

 

-문제해설

1일 때는 벌집 1개 

2부터 7까지는 벌집 2개

8부터 19까지는 벌집 3개

20부터 37까지는 벌집 4개

38부터 61까지는 벌집 5개

.

.

.

이 필요하므로 d라는 배열에 벌집수를 저장한다. d[1]=1, d[2]=7, d[3]=19, d[4]=37, d[5]=61

규칙을 확인해보면 d[i]=d[i-1] + 6*(i-1) 인 것을 알 수 있다.

d[6]을 구해보면 d[6] = d[5] + 6*5 = 61 + 30 = 91 임을 알 수 있다.

 

이제 입력받은 n값이 d[i]보다 작다면 i값을 출력해주면 된다.

입력받은 n 값이 58일 경우 d[5]인 61보다 작으므로 5를 출력하면 된다.

 

자바에서는 while문 조건에 n이 d[i]보다 크면 while문 안의 코드를 실행한다.

while문 안의 코드는 d[i+1]값을 추가하는 내용이 들어가있다.

 

n이 d[i]보다 작다면 while문을 실행하지않고 i를 출력한다.

 

 

 

-자바

package implementation;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

public class BJ2292 {
	private static BufferedWriter bw = 
			new BufferedWriter( new OutputStreamWriter(System.out));
	private static int n, sum;
	private static ArrayList<Integer> d = new ArrayList<Integer>();

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt( br.readLine() );
		
		d.add( 0 );
		d.add( 1 );
		sum = 1;
		int i = 1;
		while( n > d.get(i) ) {
			d.add( d.get(i) + (6*i) );
			sum++; 
			i++;
		}
		bw.write( sum + "\n" );
		bw.flush();
		bw.close();
		br.close();
	}
}

 

-파이썬

n = int(input())
d = [0, 1]
i = 1
while n > d[i]:
    d.append( d[i] + (6*i) )
    i += 1
    
print( i )
728x90
반응형
Comments