백준 1475번: 방 번호
by Jm Park
문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최소값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
입력
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.
출력
첫째 줄에 필요한 세트의 개수를 출력한다.
예제 입력/출력
입력 | 출력 |
---|---|
9999 | 2 |
0000 | 4 |
99699 | 3 |
900966 | 2 |
코드1
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int cnt = 1;
string n;
vector<char> nums;
// '0' ~ '9' 까지의 숫자(Char형)를 벡터에 저장
for (char i = '0'; i <= '9'; i++)
nums.push_back(i);
getline(cin, n);
for (int i = 0; i < n.length(); i++) {
// 6 or 9인 경우 6혹은 9를 벡터에서 지워줌
if (n[i] == '6' || n[i] == '9')
n[i] = find(nums.begin(), nums.end(), '6') != nums.end() ? '6' : '9';
// 입력받은 n[i]값이 벡터에 존재하는지 여부 확인
auto pos = find(nums.begin(), nums.end(), n[i]);
if (pos != nums.end())
nums.erase(pos);
else {
cnt++;
for (int i = '0'; i <= '9'; i++)
nums.push_back(i);
i--;
}
}
printf("%d\n", cnt);
return 0;
}
풀이1
평소에 쓰지 않는 것들을 사용하고 싶어서 String 형식으로 풀어봤다. 평소에 쓰지 않았던 것으로
- for문을 char형으로 받아서 직접 ‘0’ ~ ‘9’를 저장한 형식.
- 헤더에 ‘algorithm’을 추가하여 find()함수를 사용하고 찾아낸 char를 지우는 형식.
을 사용했다. 사실 조금 복잡하게 푼 느낌이 있다. 숫자 모음(vector nums에 해당)에서 입력받은 숫자와 동일한 것을 발견하면 지우고, 숫자 모음(vector nums에 해당)에서 발견하지 못한다면 count를 추가하여 기존 숫자모음에 새 숫자모음(0~9)를 추가하기 때문이다.
코드2
#include <iostream>
#include <string>
using namespace std;
int main() {
int cnt = 0;
string n;
int nums[10] = { 0, };
getline(cin, n);
// 입력받은 숫자들 각각의 등장횟수 카운트
for (int i = 0; i < n.length(); i++) {
if (n[i] == '9') // '9'의 값은 '6'으로 카운트
n[i] = '6';
nums[n[i] - '0']++;
}
// 6과 9는 서로 대체될 수 있기 때문
nums[6] = (nums[6] + 1) / 2;
for (int i = 0; i < 10; i++) {
if (nums[i] > cnt)
cnt = nums[i];
}
printf("%d\n", cnt);
return 0;
}
풀이2
입력받은 숫자들 각각의 등장횟수를 카운트 해준다.
예를들어 0131이면 nums[0]=1, nums[1]=2, nums[2]=0, nums[3]=1, … 이렇게 된다.
그리고 문제에 나와있듯이 6과 9는 서로 서로 대체될 수 있기 때문에 두개를 같은 숫자이면서 0~9숫자세트에서는 2번을 쓸 수 있는 것으로 간주한다.
그럼 이제 모든 숫자들이 카운트 된 nums배열에서 가장 큰 값을 찾아내면 그것이 필요한 숫자세트의 maximun개수이다. 왜냐하면 가장 많이 쓰이는 숫자X만큼 숫자세트가 필요하기 때문이다.
Subscribe via RSS