문제 보기
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 링크
'ProblemSolve > 항해99 코테스터디' 카테고리의 다른 글
99클럽 코테 스터디 15일차 TIL (챌린저): [백준][Java] 2665 미로만들기 - 골드4 (0) | 2024.11.11 |
---|---|
99클럽 코테 스터디 14일차 TIL (미들러): [백준][Java] 14916 거스름돈 - 실버5 (0) | 2024.11.10 |
99클럽 코테 스터디 12일차 TIL (챌린저): [프로그래머스][Java] 도넛과 막대 그래프 - level2 (3) | 2024.11.08 |
99클럽 코테 스터디 11일차 TIL (미들러): [백준][Java] 25195 Yes or yes - 골드4 (0) | 2024.11.07 |
99클럽 코테 스터디 10일차 TIL (챌린저): [백준][Java] 1253 좋다 - 골드4 (0) | 2024.11.06 |