[백준/Java] 2292번 문제 해설 및 답안

이재윤·2024년 1월 6일

백준

목록 보기
6/25

백준 2292번 자바 풀이

문제는 백준 사이트와 똑같으니, 해설부터 보셔도 됩니다.

문제

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

출력

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

예제

입력
13

출력
3

해설

우선 그림을 잘 보시면 1, 7, 19, 37, 61 ...의 이후 숫자부터 지나가는 방의 개수가 늘어나는 규칙을 확인할 수 있습니다. 이 규칙을 다음 식으로 적용할 수 있습니다.

start = start + 6 * i

start = 1, i = 0, 1, 2, 3 ...일 때 위의 규칙을 적용하면 위에서 말씀드린 숫자가 나옵니다.

이것을 토대로 0부터 n(n이 무조건 정답은 아닙니다.)까지 반복하는 for문에 start + 6 * i >= n일 경우 i + 1(시작하는 방도 포함하기 때문)을 출력하고 반복문을 멈춥니다. 그 외에는 start = start + 6 * i로 값을 변경해줍니다.

  1. 1, 7, 19, 37, 61 ...의 이후 숫자부터 지나가는 방의 개수가 늘어나는 규칙을 발견.
  2. 0부터 n까지 반복하는 for문에 start + 6 * i >= n일 경우 i + 1을 출력하고 반복문을 멈춤.
  3. 그 외에는 start = start + 6 * i로 값을 변경.

답안

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			if (start + 6 * i >= n) {
				System.out.println(i + 1);
				break;
			}
			else start += 6 * i;
		}
	}
}
profile
부족한 점이 많습니다. 피드백은 환영입니다!

0개의 댓글