본문 바로가기
PS/BOJ

[자바] 백준 25193 - 곰곰이의 식단 관리 (boj java)

by Nahwasa 2022. 5. 16.

문제 : boj25193

 

  결국 중요한건 음식의 리스트를 '원하는 대로' 조정할 수 있다는 점이다.

 

  그럼 'CCCCA' 와 같은 경우를 생각해보자. 어떻게 해야 연속된 C의 최댓값을 최소화시킬 수 있을까? 'CCACC'처럼 A로 나누면 된다.

 

  'CCCCCAB'와 같은 경우엔 어떨까? 마찬가지로 최대한 C를 그 이외의 음식으로 잘게 나누어야 한다. 'CCACCBC'처럼 나누면 될 것이다. 그렇다면, C의 개수를 C가 아닌 것들의 개수로 나누면 될 것임을 알 수 있다. C가 아닌 것을 A라고 한다면 다음과 같은 식을 계산하면 된다(|X|는 X의 개수를 의미함). +1을 한 이유는 예를들어 1개의 벽으로 나눌 수 있는 구역은 2개이고, 2개의 벽으로는 3개가 된다. 그때문에 +1을 해준 것이다. 올림을 하는 이유는 5/2=2.5인데, 내려버리면 당연히 답이 되지 않는다. 무조건 올려줘야한다.

  이 때 항상 코드를 짤 때는 오차의 위험을 막기 위해 어쩔 수 없는 경우(기하문제 풀때..)를 제외하고는 double을 사용하지 않는게 더 좋다. 따라서 올림 처리는 'C%(A+1)'가 0이 아니라면 +1을 해주는 것으로 대신할 수 있다.

 

 

코드 : github

 ...
 private void solution() throws Exception {
    int n = nextInt();
    String s = nextLine();
    int cnt = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == 'C')
            cnt++;
    }
    System.out.println(cnt/(n-cnt+1) + (cnt%(n-cnt+1)!=0?1:0));
}
...

댓글