본문 바로가기

Algorithm

[백준 2292번] 벌집 문제 Java 풀이

안녕하세요!!!오늘은 제가 풀었던 백준 문제 중 머리 푸는 용도로 풀었던 문제를

소개시켜드리고 풀이를 보여드리겠습니다

 

사진을 보시면 가운데 1을 둘러싸면서 번호가 매겨집니다

그래서 만약 입력으로 숫자가 들어오면 그 숫자가 매겨진 방에서

1번까지 가려면 몇 개의 방을 거쳐야 하는지 나오는 문제입니다

(자기가 있는 방과 1번 방도 포함합니다!!!)

 

사진을 보고 딱 드는 생각은 계차수열입니다

계차수열은 수열간의 차이가 등차수열인 수열입니다

이 사진을 보시면 제가 그림판으로 선을 그렸습니다

빨간 선 중에서 가장 큰 값을 나열해보면(1을 첫째 항으로 합니다)

1, 7, 19, 37, 61, ...입니다

앞과 뒤에 있는 숫자들을 빼보면

6, 12, 18, 24, ...이렇게 6씩 늘어나는 등차수열이 나옵니다

그래서 저는 등차수열의 합 공식을 이용해서 풀이를 했습니다

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
        
        
		int num = scan.nextInt(); //현재 방의 숫자
		int room;                 //거처야하는 방의 숫자
		
		for(room = 1 ; true ; room++) {
			if(num == 1) break;   //num이 1이면 한 개의 방만을 거침
			else if((1+((room*(6*2+(room-1)*6))/2)) >= num) {
				room++; //자기 자신을 포함해야하기 때문에 1을 더해준다
				break;
			}
		}
		System.out.println(room);
	}

}

제가 풀었던 코드입니다

간단하게 손이나 머리를 풀어주는 정도의 문제로 좋을 것 같다고 생각이 드네요