본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 2292번 자바 문제 답/해설(벌집 문제)

by 리드민 2021. 12. 14.
반응형

[1] 백준 카테고리
단계별로 풀어보기
기본 수학
2단계 2292번 문제
벌집 문제

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

 

2292번: 벌집

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

www.acmicpc.net


[2] 문제

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

2. 출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

3. 예제 입력 1
13

4.예제 출력 1

3


[3] 정답
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 count = 1;
		int range = 2; 
 
		if (n == 1) {
			System.out.print(1);
		}
 
		else {
			while (range <= n) { 
				range = range + (6 * count); 
				count++;
			}
			System.out.print(count);
		}
	}
}

 

2. 정답 해설 포함

import java.util.Scanner;
// java.util.Scanner 클래스를 import 한다.

public class Main {
// 접근제어자 public으로 main class를 선언한다.
	public static void main(String[] args) {
	// 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 main 함수를 선언한다.

		Scanner in = new Scanner(System.in);
		// Scanner 객체 in를 선언한다.
 
		int n = in.nextInt();
		// int형 변수 n를 선언하고 값을 입력받아 저장한다.
		int count = 1;
		// int 형 변수 count를 선언하고 값 1를 저장한다.
		int range = 2; 
		// int 형 변수 range를 선언하고 값 2를 저장한다.

		if (n == 1) {
		// 변수 n의 값이 1일때 괄호 안의 문장이 실행된다.
			System.out.print(1);
			// 1를 출력한다.
		}
 
		else {
			while (range <= n) {
			// 변수 range에 저장된 값이 변수 n에 저장된 값 이하일때 while문이 실행된다.
				range = range + (6 * count); 
				count++;
				/* 8 = 2 + (6) 이 처음 실행된다. count 값이 1 증가해서 2가 된다.
				while 문 조건값을 비교한다 range <= n 일 경우 while 문이 한번 더 실행된다.
				14 = 2 + (12)가 두 번째로 실행된다. count 값이 1 증가해서 3이 된다.
				또 while 문 조건값을 비교한다. range <= n일 경우 while 문이 한번 더 실행된다.
				계속해서 반복된다. range > n일 때까지 반복된다.
				 */
			}
			System.out.print(count);
			// count 값을 출력한다.
		}
	}
}

방의 개수가 6씩 늘어나는 규칙성을 띤다.

0개를 지날때 1~1(1개)

1개를 지날때 2~7(6개)

2개를 지날때 8~19(12개)

3개를 지날때 20~37(18개)

4개를 지날때 38~61(24개)

방의 개수가 등차수열을 띄므로 등차수열꼴로 코드를 짜주면 된다.

반응형