9가 4개, 6이 3개, 나머지 숫자는 1개씩 있다면,  최소 4세트가 필요하다. 
9가 2개, 6이 0개 나머지 숫자는 1개씩 있다면,  최소 1세트가 필요하다. 

[결론]

9와 6을 합했을 때 짝수 개라면, 2로 나눈 숫자만큼의 세트가 필요하다. 
9와 6을 합했을 때 홀수 개라면,  +1 한 만큼에서 2로 나눈 숫자만큼의 세트가 필요하다. 

 

cnt 에는 9와 6을 제외한 숫자의 개수 중에서, 최대 개수를 구한다. 
 
temp_sum은 9와 6의 카드 개수를 전부 누적한다.

 

 
#include <bits/stdc++.h>
using namespace std;

int n, cnt;
int v[11];

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> n;
  string s = to_string(n);
  for(auto num : s){
    v[num - '0']++;
  }

  int temp_sum = 0, temp_cnt = 0; // 9와 6만 센다 

  for(int i = 0; i <= 9; i++){
    if(i == 9 || i == 6) temp_sum += v[i];
    else cnt = max(cnt , v[i]);
  }
  
  if( temp_sum % 2 == 0) temp_cnt = temp_sum / 2;
  else temp_cnt = (temp_sum + 1) / 2;

  cout << max(cnt, temp_cnt);

  return 0;
}
 
728x90

'알고리즘 > 백준' 카테고리의 다른 글

수 정렬하기 2 백준 2751번 c++  (0) 2022.02.16
마인크래프트 백준 18111번 c++  (0) 2022.02.14
영화감독 숌 백준 1436번 c++  (0) 2022.02.14
랜선 자르기 백준 1652번 c++  (0) 2022.02.14
카드 백준 11652번 c++  (0) 2022.02.13

문제

방 번호 백준 1475 c++

"맞았습니다."코드

#include <bits/stdc++.h>
using namespace std;
​
int maxnum = 1; // 최소 세트 개수는 1개다. 
int N;
int arr[10]; // 0부터 9
​
void func(){
​
    cin >> N;
​
    while(N > 0){
        int target = N%10; // 자리수 1개 분리 하기 
        arr[target]++; // 자리수 개수 카운팅 
        N /= 10;
    }
​
    for(int i=0; i<=9; i++){
        if(i==6 || i==9) continue;
        maxnum = max(maxnum, arr[i]);
    }
    // (a[6]+a[9])/2를 올림한 값이
    // 6, 9에 대한 필요한 세트의 수이므로 (a[6]+a[9]+1)/2을 계산
    maxnum = max(maxnum, (arr[6]+ arr[9]+1) / 2);
​
    cout << maxnum;
}
​
​
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
​
    func();
    return 0;
}


리뷰

최소 세트 개수는 1개다.

6과 9는 서로 대신 쓸 수 있기 때문에. 마지막에 처리를 해준다.

 

(a[6]+a[9])/2 를 올림한 수가 6, 9에 대한 필요한 세트의 수다.

6이 2개, 9가 3개 필요한 경우, 올림한 3개의 세트가 필요하다.

 

6의 개수 9의 개수 필요한 세트 수 6와 9개수에 1을 더해서 세운 식
1개 1개 1개 (1+1 +1) / 2 = 1
2개 1개 2개 (2+1 +1) / 2 = 2
2개 2개 2개 (2+2 +1) / 2 = 2
2개 3개 3개 (2+3 +1) / 2 = 3

1212669 가 input으로 들어왔다고 하자.

6, 9를 제외한 다른 수를 확인했을 때 maxnum이 2 였다.

6은 2개, 9는 1개다. 6과 9만 생각하면 2세트가 있으면 된다.

maxnum = max(maxnum, (arr[6]+ arr[9]+1) / 2);

이렇게 maxnum과 비교하면 정답은 2가 된다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

strfry 백준 11328 c++  (0) 2021.11.22
두 수의 합 백준 3273번 c++  (0) 2021.11.22
알파벳 개수 백준 10808번  (0) 2021.11.21
숫자 백준 10093 c++  (0) 2021.11.20
일곱 난쟁이 백준 2309 c++  (0) 2021.11.20

+ Recent posts