🐝 벌집
규칙만 잘 찾는다면 해결 가능한 문제
✏️ 문제
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
출력
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.
💡 해결방법
1. 중앙의 방 1을 둘러싸고 있는 방들 중, 가장 큰 수대로 나열하면
1 7 19 37 61
이 수들의 규칙은
1 (+6) 7 (+12) 19 (+18) 37 (+24) 61
6의 배수로 증가한다.
2. i는 출력값으로 초기값을 1로 설정하고, i가 증가하면서 증가폭을 설정해준다.
예를 들어 13번방의 값을 구한다면 i가 증가하면서 while을 돌다가, 13보다 결과값이 커진다면 while을 빠져나온다.
이때 i가 원하는 출력값이 된다.
3. 1을 넣으면 결과값이 2가 나오기 때문에 1번방일때 출력값이 1이라는 것은 따로 예외처리한다.
👩🏻💻 소스코드
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());
int result = 1;
int i = 1;
if (num==1) {
System.out.println("1");
}
else {
while(true) {
result = result+(6*i);
i++;
if (result>=num) break;
}
System.out.println(i);
}
}
}
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
'알고리즘 > 백준' 카테고리의 다른 글
백준 | 2156 - 포도주 시식 (python) (0) | 2021.10.08 |
---|---|
백준 | 10610 - 30 (python) (0) | 2021.10.07 |
백준 | 10250 - ACM호텔 (Java) (0) | 2021.10.07 |
백준 | 10950 - A+B - 3 (Java) (0) | 2021.10.07 |
백준 | 1149 - RGB거리 (python) (0) | 2021.10.07 |