방 번호를 입력으로 받아 0~9까지 숫자가 하나씩 들어있는 숫자 세트가 방번호를 위해 몇개가 필요한지 구하는 문제입니다.
입력이 공백으로 분리되어 들어오지 않기 때문에 string으로 입력을 받고 해당하는 숫자 순서의 배열 값을 1씩 증가시킵니다.
단순히 입력으로 들어온 숫자의 갯수를 각각 세어 최대 갯수를 출력하면 되긴 하지만 6과 9는 뒤집에서 각 숫자로 대체할 수 있기 때문에 이를 위한 처리를 해주어야 합니다. 들어온 숫자가 6 또는 9일때 전부 9로 카운트 하여 6, 9의 전체 갯수를 구하고 필요한 카드 갯수를 구합니다.
#include<iostream>
using namespace std;
int arr[10];
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
string rnum;
cin >> rnum;
for (int i = 0; i < rnum.size(); i++)
{
if (rnum[i] == 6 + '0')
{
arr[9]++;
}
else
{
arr[rnum[i]-'0']++;
}
}
//for (char e : rnum)
//{
// arr[e - '0']++;
//}
int cnt = 0;
while (arr[9] > 0)
{
cnt++;
arr[9] -= 2;
}
int max = arr[0];
for (int i = 1; i <= 8; i++)
{
if (max < arr[i]) max = arr[i];
}
if (cnt >= max)
cout << cnt;
else
cout << max;
return 0;
}
배열에 관한 알고리즘 게시글은 여기에서 확인하실 수 있습니다.
'스터디 > 알고리즘 문제풀이' 카테고리의 다른 글
[C++] 백준 2504번 - 괄호의 값 (1) | 2021.06.23 |
---|---|
[C++] Programmers 2020 카카오 인턴십 - 키패드 누르기 (0) | 2021.06.22 |
[C++] 백준 1182번 - 부분수열의 합 (0) | 2021.06.21 |
[C++] 백준 12851번 - 숨바꼭질 2 (0) | 2021.06.02 |
[C++] 백준 3273번 - 두 수의 합 (2) | 2021.02.20 |