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 링크

https://github.com/MetroDefro/CodingTest_AutoSave/tree/main/%EB%B0%B1%EC%A4%80/Bronze/27961.%E2%80%85%EA%B3%A0%EC%96%91%EC%9D%B4%EB%8A%94%E2%80%85%EB%A7%8E%EC%9D%84%EC%88%98%EB%A1%9D%E2%80%85%EC%A2%8B%EB%8B%A4

 

CodingTest_AutoSave/백준/Bronze/27961. 고양이는 많을수록 좋다 at main · MetroDefro/CodingTest_AutoSave

모든 코딩 테스트 자동 저장. Contribute to MetroDefro/CodingTest_AutoSave development by creating an account on GitHub.

github.com