
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();
}
}
이것 뭐에요. . . ?
요 근래 푼 실버 문제 중 문제에 접근하는 시간이 가장 길었던 문제였다 . .
이 표시가 각각 내림과 올림 표시였다 !
하지만 나눈 값을 정수로 정의하면 자동으로 내림 값이 정수로 저장되기 때문에,
올림 값은 주어진 마력에서 내림 값을 빼준 값으로 정의해주었다.
List<Integer> nextPower = new ArrayList<>();
power 리스트를 단독으로만 사용하면 기존 power 리스트를 순회하면서
power 리스트를 수정하게 된다.
따라서 임시 리스트인 nextPower 를 생성하여 각각의 자식 마력 값을 구해주고,
합계에 모든 마력을 저장해주었다.