코딩테스트 연습 기록

이종길·2021년 12월 27일
0

코딩테스트 연습

목록 보기
20/128

2021.12.27 7일차

백준 2292번 (벌집)

문제

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

나의 풀이

  1. 늘어나는 면적 6의 배수
    1개 - 1
    2개 - 2 ~ 7 (6)
    3개 - 8 ~ 19 (12)
    4개 - 20 ~ 37 (18)
  2. 재귀함수?
    f(1) = 1
    f(n) = f(n-1) + 6(n-1)
  3. n에 6의 배수씩 빼기, count 활용
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int num = scanner.nextInt();
        int count = 1;

        while (true) {
            if (num == 1) {
                break;
            } else if (num <= count * 6 + 1) {
                count += 1;
                break;
            } else {
                num -= (count * 6);
                count++;
            }
        }

        System.out.println(count);
    }
}

생각하기

  • 조건을 어렵게 접근
  • 개수를 하나씩 증가, 6을 곱하면서 n 빼기
  • n이 1보다 작아졌을 때 개수 구하기
profile
Go High

0개의 댓글

관련 채용 정보