[백준] 2292

당당·2023년 4월 19일
0

백준

목록 보기
6/179

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

📔문제

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


📝입력

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


📺출력

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


📝예제 입력 1

13

📺예제 출력 1

3

🔍출처

ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Seoul Nationalwide Internet Competition 2004 B번

-문제의 오타를 찾은 사람: waylight3


🧮알고리즘 분류

  • 수학

📃소스 코드


import java.util.Scanner;

public class Code2292 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		
		int n=scanner.nextInt();
		int count=1;
		int first=2;
		
		if(n==1) {
			System.out.println(count);
		}
		else {
			while(first<=n) {
				first=first+count*6;
				count++;
			}
			System.out.println(count);
		}
		
		
		
	}

}



📰출력 결과


📂고찰

https://www.acmicpc.net/board/view/99363
https://calcproject.tistory.com/663

위의 게시글을 보고, 계차수열로 풀었는데 자꾸 42%에서 틀렸다고 떴다.
그래서, 다른 방향으로 접근했다.

1번->0
2번~7번->1
8번~19번->2
20번~37번->3
38번~61번->4

이렇게 되는데,

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		
		int n=scanner.nextInt();
		double total=0;
		int answer=0;
		
		total=Math.pow((n-1)/3,0.5);
		
		System.out.println(Math.round(total)+1);
	}

}

이전에 제출했던 코드이다.
first는 각 층의 시작 수 (2, 8, 20, 38 등..)이고,
count는 각 방의 개수를 나타낸다.

firstn보다 작은동안 while문이 동작하며 만약 first가 더 커지면 그것이 방의 수가 된다.

profile
MySQL DBA 신입 지원

0개의 댓글