곽로그

[백준 2292] 벌집 본문

알고리즘/백준

[백준 2292] 벌집

일도이동 2019. 4. 25. 23:09
반응형

 

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

www.acmicpc.net

접근법

어려운 척 하는 문제다. 하나씩 나열하면 쉽게 접근할 수 있다. 고등수학1에 (지금은 어디에 속하는지는 모르겠지만) 군수열이 규칙이다. 

 

 이렇게 해서 보면 검은색 테두리 까지는 최소경로가 1이고 초록색 테두리 까지는 최소경로가 2, 빨간색 테두리 까지는최소경로가 3이다. 표로 나타내면 아래와 같다. 

 각 항의 첫항을 나열해 보면 2 8 20 38 이렇게 계차가 6n인 계차수열이 되므로 주어진 수가 n번째 항보다는 크고 n+1번째 항보다는 작으면 n번째 항+1을 한 결과값을 출력하면 된다. 예를 들어 25가 입력된 경우 25는 3번째 항인 20보다는 크고 4번째 항인 38보다는 작으므로 3+1, 4를 출력하면 된다. 

 

 처음에 이걸 구현하려고 하니까 조금 어려웠다. 어떤 변수가 필요하고 어떻게 변화시켜나가야 하는지 막연했는데, 구체적인 숫자 (예를들어 25)로 어떻게 진행되는지를 생각해봤다. 

 

 

 

 

 

 

 

 

 

 따라서 비교하는 숫자를 저장하는 변수(start) 6을 저장할 변수(sequence) 곱하는 수를 저장할 변수(count)가 필요하고 출력은 count+1을 하면 된다. 

 

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int n=in.nextInt();
		int start=2;
		int sequence=6;
		int count=0;
		while(true) {
			if(n>=start) {
				count+=1;
				start=start+sequence*count;		
			}
			else {
				System.out.println(count+1);
				break;
			}
			
		}
	}

}

20.02.09

package math;

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

public class BulZip {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num = Integer.parseInt(br.readLine());
		
		int line = 1;
		int lineNum = 1;
		
		while(true) {
			// line 과 lineNum 사이의 관계식
			if(line == 1 || line == 2) {
				lineNum = line;
			}
			else {
				lineNum += 6*(line-2);
			}
			
			//num이 몇번째 line에 있는지 구하기
			if(num<lineNum) {
				break;
			}
			else {
				line ++;
			}
		}
		bw.write(String.valueOf((line-1)));
		bw.flush();
		bw.close();
	}
}
반응형

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

[백준 1977] 완전제곱수  (0) 2019.05.03
[백준 1193] 분수찾기  (0) 2019.04.26
[백준 10039] 평균점수  (0) 2019.04.25
[백준 2448] 별찍기-11 (시간초과)  (0) 2019.04.24
[백준 8958] OX퀴즈  (0) 2019.04.24
Comments