[백준] 31780번: 불사조 _ JAVA

아로롱·2024년 12월 19일

algorithm

목록 보기
23/25

📍 문제

https://www.acmicpc.net/problem/31780

💻 답안 코드


import java.io.*;
import java.util.*;

public class Main {
    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 X = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        List<Integer> power = new ArrayList<>();
        power.add(X);
        int sum = X;
        for (int i = 0; i < M; i++) {
            List<Integer> nextPower = new ArrayList<>();
            for (Integer p : power) {
                int floor = p / 2;
                int ceil = p - floor;
                sum += floor;
                sum += ceil;
                nextPower.add(floor);
                nextPower.add(ceil);
            }
            power = nextPower;
        }

        // 결과 출력
        bw.write(String.valueOf(sum));
        bw.flush();
        bw.close();
        br.close();
    }
}


💡

이것 뭐에요. . . ?
요 근래 푼 실버 문제 중 문제에 접근하는 시간이 가장 길었던 문제였다 . .

1. 올림과 내림

x2\left\lfloor{x\over 2}\right\rfloor

x2\left\lceil{x\over 2}\right\rceil

이 표시가 각각 내림과 올림 표시였다 !
하지만 나눈 값을 정수로 정의하면 자동으로 내림 값이 정수로 저장되기 때문에,
올림 값은 주어진 마력에서 내림 값을 빼준 값으로 정의해주었다.

2. 임시 List 생성

List<Integer> nextPower = new ArrayList<>();

power 리스트를 단독으로만 사용하면 기존 power 리스트를 순회하면서
power 리스트를 수정하게 된다.
따라서 임시 리스트인 nextPower 를 생성하여 각각의 자식 마력 값을 구해주고,
합계에 모든 마력을 저장해주었다.

profile
Dilige, et fac quod vis

0개의 댓글