728x90
빡구현 문제다. 예외처리를 해주고 너무 쉽게 생각한 것이 문제였다.
처음엔 112233 이런식으로 들어오면 중복할때마다 카운트 1을 쳤다. 그러나 한 "세트" 가 들어오는데 계속 추가하면 비효율적으로 짜게되는 것을 생각해야한다.
그래서 배열을 만들어 각각 숫자가 몇개 들어오는지 파악하고 가장 큰 수의 세트를 현재 필요 세트라고 생각했다.
그리고 6,9는 함께 사용가능한 것도 생각해야한다. 처음에는 일일히 예외처리를 해주려 했다가 피를 봤다. 잘 생각해보면 6,9를 적절하게 분배하면 되는 거다. 왜냐면 6,9가 일단 0이 아니라면 세트가 존재한다는 것이기 때문이다. 세트가 존재하지 않으면 추가를 해준다.
틀린코드 :
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main() {
string str;
vector<int> vec;
map<int, int> numbers;
int sixornine = 0;
cin >> str;
for (int i = 0; i < str.size(); i++) {
vec.push_back(str[i] - '0');
numbers.insert(make_pair(vec[i], 0));
}
/*
sort(vec.begin(), vec.end());
int BIG = vec[vec.size() - 1];*/
int answer = -1;
for (auto i : vec) {
numbers[i]++;
}
for (auto i : numbers) {
if (answer < i.second) {
answer = i.second;
}
}
if (answer == numbers[6] || answer == numbers[9]) {
int tmp = numbers[6] + numbers[9];
if (tmp % 2 == 0)
answer = tmp / 2;
else
answer = tmp / 2 + 1;
}
cout << answer;
}
맞은 코드 :
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
string str;
vector<int> vec;
int numbers[10] = {0,};
int sixornine = 0;
cin >> str;
for (int i = 0; i < str.size(); i++) {
vec.push_back(str[i] - '0');
}
int answer = -1;
for (auto i : vec) {
if (i == 6) {
if (numbers[6] > numbers[9])
numbers[9]++;
else
numbers[6]++;
}
else if(i == 9) {
if (numbers[6] < numbers[9])
numbers[6]++;
else
numbers[9]++;
}
else {
numbers[i]++;
}
}
for (int i = 0; i < 10; i++) {
if (answer < numbers[i]) {
answer = numbers[i];
}
}
cout << answer;
}
'백준 문제 풀이' 카테고리의 다른 글
백준 14503번 로봇 청소기 (C++) (0) | 2022.11.26 |
---|---|
백준 11866번 요세푸스 문제 0 (C++) (0) | 2022.11.26 |
백준 2805번 나무 자르기(C++) (2) | 2022.10.29 |
백준 7562 나이트의 이동(C++) (2) | 2022.10.13 |
백준 1261번 알고스팟(C++) (0) | 2022.10.12 |