[백준/JAVA] 31868번 수박 게임

정은아·2024년 5월 31일

[알고리즘] 수학 모음

목록 보기
99/152
post-thumbnail

문제

내 풀이 1 : 틀렸습니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main extends Exception {
    public static void main(String[] args) throws IOException {
        // 1단계 과일은 체리 N단계 과일은 수박
        // i단계 과일 2개를 소모하면 i+1단계 과일 1개를 만들 수 있다.
        // k개의 체리로 최대 몇 개의 수박을 만들 수 있나?

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        // (n-1) * 2 = 1수박

        int answer = 0;

        while (true){
            if (((N-1)*2) > K){
                break;
            }else{
                K -= (N-1)*2;
                answer++;
            }
        }

        sb.append(answer);
        System.out.println(sb.toString());

    }
}

내 풀이 2 : 정답입니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main extends Exception {
    public static void main(String[] args) throws IOException {
        // 1단계 과일은 체리 N단계 과일은 수박
        // i단계 과일 2개를 소모하면 i+1단계 과일 1개를 만들 수 있다.
        // k개의 체리로 최대 몇 개의 수박을 만들 수 있나?

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        int waterCount = 1;
        int answer = 0;

        // 체리는 1단계부터 시작하니까 N-1한다.
        // 수박 1개에 필요한 체리의 개수를 구한ㄷ.
        for (int i = 1; i < N; i++) {
            waterCount *= 2;
        }

        // 위의 for문은 Math.pow를 사용해 간단하게 나타낼 수 있다.
       // waterCount = (int)Math.pow(2, N-1);

        // K개에서 계속 수박 만들 때 필요한 체리 개수를 빼준다
        while (K >= waterCount){
            K -= waterCount;
            answer++;
        }

        System.out.println(answer);
    }
}

느낀점

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글