2292. 벌집 [JAVA]

Nak.s·2023년 1월 16일
0

CodeTest

목록 보기
8/19

벌집이 커질수록 그 둘레는 6의 배수의 누적합이 된다.
1을 기준으로 시작하면,
1 -> 7 -> 19 -> 37 ... 순으로 누적된다.

그렇다면, 원하고자 하는 방번호로 가기위해서는 어떻게 해야할까.
바로 내가 가고자 하는 방번호가 6의배수의 누적 합 사이에 있는지 파악하면된다.

예를 들어 14번방에 가고 싶다면,
14라는 숫자는 6의 0~1(6)배수의 합과 6의 0~2배수(18) 합 사이에 있으니,
자기 자신 포함 + 2(6의 2배수)를 하면 14번방으로 이동하는 가장 최소 횟수가 된다.

import java.io.IOException;
import java.util.Scanner;

public class BJ_2292 {

    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt(); //목적지 방 번호
        if(a < 1 || a > 1000000000) return;
        if (a == 1) {
            System.out.println(1);
            return;
        }
        int sumOfMultiples = 0;
        int m = 0;
        
        while (true) {
            if(sumOfMultiples < (a - 1) && (a - 1) <= (6 * ++m) + sumOfMultiples){
                break;// a-1은 6의 배수로 계산하기 편하게 
            }
            sumOfMultiples = (6 * m) + sumOfMultiples;
        }
        System.out.println(m + 1); //자기 자신 + 이동 횟수
    }
}
profile
궁금함이 많은 개발자

0개의 댓글