ProblemSolve/항해99 코테스터디
99클럽 코테 스터디 13일차 TIL (미들러): [백준][Java] 27961 고양이는 많을수록 좋다 - 브론즈1
노루동산
2024. 11. 9. 19:50
문제 보기
https://www.acmicpc.net/problem/27961
풀이
오늘은 쉬운 문제가 나왔다!
우선 최대한 전체 복제 마법으로 N에 가까운 많은 고양이들을 만들고 일부분만 복제하여 N을 채우면 될 것 같다.
그렇게 1에서부터 계속 2배 마법을 걸 경우, 2의 n승으로 늘어나게 된다.
long i = N == 0 ? 0 : 1, k = 1;
for(; k * 2 <= N; i++, k*= 2){}
따라서 위와 같은 간단한 for문을 N보다 작거나 같을 때까지 돌리고 i를 ++하여 몇 승인제 체크하였다.
i가 N이 0일 경우는 0, 아니면 1인데 이 이유는 입력으로 0이 들어왔을 때의 예외처리를 위해서이다.
bw.write(i + (N > k ? 1 : 0) + "\n");
출력부분이다.
k값이 N과 같은 경우 부분 복제 마법을 쓸 필요가 없기 때문에 0,
N이 더 클 경우 한 번 더 마법을 써야 하기 때문에 1을 더해주었다.
입력 부분을 제외하고 3주 정도니 간단한 코드이다~
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
long N = Long.parseLong(br.readLine());
long i = N == 0 ? 0 : 1, k = 1;
for(; k * 2 <= N; i++, k*= 2){}
bw.write(i + (N > k ? 1 : 0) + "\n");
bw.flush();
bw.close();
}
}
GitHub 링크