문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다.
그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.
숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때
몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.
예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
| 예제 입력 | 예제 출력 |
| 13 | 3 |
⭕ 풀이
import java.io.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
br.close();
int i=1;
int sum = 1;
while(true){
if(num<=sum){
break;
}
sum += i*6;
i++;
}
System.out.print(i);
}
}
✅ 풀이과정
1
2~7 ( 6 개 ) 2번
8~19 ( 12개 ) 3번
20~37 ( 18개 ) 4번
38~61 ( 24개 ) 5번
62~91 ( 30개 ) 6번
처음엔 i 를 1씩 증가시키며 num과 i*6을 비교하려했지만 그렇게 작성할경우
num은 6과비교 그다음은 12와 비교 그다음은 18과 비교가된다.
하지만 처음엔6과 그다음엔 12와비교가 아닌 12를 더한 18과비교하고
그 다음엔 18과 비교를 하는게 아닌 18을 더한 36과 비교를 하도록 해야한다.
그부분을 구현하기위해 sum이라는 변수를 주고 거기에 i*6을 누적해 비교하도록 작성했다.
sum의 초기값을 1로 하여 처음엔 sum += 1*6을 해 7을 만들어 해당값보다 작거나 같으면 탈출
하고 지금까지 몇번의 방을 지났는지 즉 몇번을 누적합했는지를 세고있던 i를 출력한다.
-출처
'Algorithm > Baekjoon(Java)' 카테고리의 다른 글
| [백준/JAVA] 2869 : 달팽이는 올라가고 싶다 ( 기본 수학 1 ) (0) | 2022.08.02 |
|---|---|
| [백준/JAVA] 1193 : 분수찾기 ( 기본 수학 1 ) (0) | 2022.08.01 |
| [백준/JAVA] 1712 : 손익분기점 ( 기본 수학 1 ) (0) | 2022.07.30 |
| [백준/JAVA] 1316 : 그룹 단어 체커 ( prev = 0 ) (0) | 2022.07.29 |
| [백준/JAVA] 2941 : 크로아티아 알파벳 (0) | 2022.07.28 |