-
[java] 백준 알고리즘 2292번 벌집 풀이알고리즘/백준 알고리즘 2018. 5. 25. 15:00
이 문제의 규칙은 등차수열! 이다.
힌트는 이 문제의 유형이 규칙찾기였기 때문이다.
어떠한 수에 도달하기 위해 갈 수 있는 방법은 왼쪽으로 돌아갈 수도, 오른쪽으로 돌아갈 수도 있어서
딱히 고정된 방향이 있는 것 같진 않았다.
어디를 가도 1에서 시작하고, 도달하고 싶은 수가 있는 방향으로 가면
중간 과정 중에 어떤 숫자를 거쳐가든, 거쳐가는 방의 갯수는 똑같았다.
범위를 구해서 그 범위를 지나가면 '하나의 방을 지나쳤다'라고 계산하면 어떨까라는 생각을 했다.
어느 순간부터 벌집이 한칸씩 바깥으로 넓어지는지를 체크해봤다.
둘러싸는 한 원의 범위 최대값을 기점으로 한칸씩 바깥으로 커졌다.
한 원의 최대값:
1 -> 7 -> 19 -> 37 -> 61
도달하고자 하는 수에 도달하기 위해 이 최대값들의 사이에 있는 값들의 방을 거쳐간다.
최대값 규칙이 보이지 않는가?
6 -> 12 -> 18 -> 24, 숫자 6의 차이로 올라가는 값이 커지는 등차수열이다.
while문을 돌리면서 각 원들의 최대값이 도달하고자 하는 수를 넘을 때, 루프를
빠져나오게 하면 거쳐가는 방의 갯수를 구할 수 있다.
* 풀이 소스
123456789101112131415161718192021222324public class Baekjoon2292 {/* 등차수열 문제 */public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));StringTokenizer st = new StringTokenizer(br.readLine());int n = Integer.parseInt(st.nextToken());int circleScope = 1; // 벌집의 범위int commonDifference = 6; // 등차수열int room = 1; // 거쳐가는 방의 갯수while(n > circleScope) {circleScope += commonDifference;commonDifference += 6; // 등차는 6이다room ++;}bw.write(String.valueOf(room));bw.flush();}}cs '알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[java] 백준 알고리즘 10250번 ACM호텔 풀이 (0) 2018.05.29 [java] 백준 알고리즘 15802번 타노스 풀이 (0) 2018.05.28 [java] 백준 알고리즘 2941번 크로아티아 알파벳 풀이 (0) 2018.05.25 [java] 백준 알고리즘 5622번 다이얼 풀이 (0) 2018.05.24 [java] 백준 알고리즘 2908번 상수 풀이 (0) 2018.05.24