문제
https://www.acmicpc.net/problem/2885
풀이(11분)
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));
int k = Integer.parseInt(br.readLine());
int num = 1;
while(num < k){
num *= 2;
}
int answerNum = num;
int answerCount = 0;
while(k > 0){
if(num > k){
num /= 2;
answerCount++;
continue;
}
if(num == k){
break;
}
k -= num;
}
System.out.println(answerNum + " " + answerCount);
}
}
문제 풀이 전략
요즘 연습 중인 방법인데, 초반에 아이디어를 머릿속으로만 정리하는 것이 아니라 반드시 주석으로 작성해 두자.
특히, 문제에서 중요한 조건이 보인다면 써두자.
이 문제의 경우 초반에 주석으로 작성한 아이디어가 문제 해결의 전부를 담당했다.
풀이 순서는 다음과 같다.
1. 일단 구매해야하는 가장 작은 초콜릿의 크기를 구하자.
-> 가장 작은 초콜릿의 크기를 구하기만 한다면, 반드시 이 안에서 해결할 수 있다.(어차피 가장 작게 자르면 1개 단위로 나오기 때문)
-> 만약 이 조건들이 엮어졌다면 복잡한 문제가 될 수 있다고 생각한다.
2. k보다 num이 작아질 때까지 2로 나누어가며 이때마다 나눈 값을 추가하자.
3. 만약 k와 num이 같다면 바로 끝내면 된다.
4. k가 num보다 크다면 k에서 num만큼의 값을 빼주자.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 4307번. 개미(JAVA) (0) | 2025.03.04 |
---|---|
[백준] 3896번. 소수 사이 수열(JAVA) (0) | 2025.03.04 |
[백준] 1283번. 단축키 지정(JAVA) (0) | 2025.03.03 |
[백준] 5636번. 소수 부분 문자열(JAVA) (1) | 2025.03.01 |
[백준] 14627번. 파닭파닭(JAVA) (0) | 2025.02.26 |