문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
입력
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 필요한 세트의 개수를 출력한다.
Solved.ac 레벨
실버 V
풀이
#include <bits/stdc++.h>
using namespace std;
string roomNum;
int ans;
int numSet[10];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> roomNum;
for(int i = 0; i < roomNum.length(); i++){
numSet[roomNum[i] - '0']++;
}
for(int i = 0; i < 10; i++){
if(i != 6 && i != 9){
ans = max(ans, numSet[i]);
}
}
int nineSix = (numSet[6] + numSet[9] + 1) / 2;
cout << max(ans, nineSix) << '\n';
return 0;
}
여러가지 풀이가 가능하겠지만 나는 문자열로 입력받아 인덱싱으로 개수를 세어 별도의 배열에 저장하는 방법으로 접근하였다.
6과 9는 한 세트당 2개씩 반복될 수 있으므로 6과 9의 개수를 더해 2로 나누어 세어야 한다. 1을 더해주지 않고 나누게 되면 필요한 세트의 개수보다 적은 값이 나오므로 더해주었다.
마지막으로 6과 9을 제외한 숫자의 갯수와 6 , 9의 개수 중 큰 값이 최소로 필요한 숫자 세트의 개수다.
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 16430번 : 제리와 톰 (0) | 2022.10.21 |
---|---|
[BOJ / C++] 25304번 : 영수증 (0) | 2022.10.20 |
[BOJ / C++] 24262번 : 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2022.10.18 |
[BOJ / C++] 15720번 : 카우버거 (0) | 2022.10.18 |
[BOJ / C++] 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2022.10.14 |