
https://www.acmicpc.net/problem/1475
이 문제에서의 핵심은 6, 9는 숫자를 바꾸어 쓸 수 있다는 것이다. 주어진 방 번호에 6 또는 9가 총 2n개 있으면, 세트를 n개만 써도 되는 것이다. 나머지 숫자들은 중복되는 경우 중복되는 만큼 세트가 필요하다.
방 번호를 int로 입력받은 후 문자열로 바꿔야 하나? 싶었는데 아예 처음부터 문자열로 입력받으면 되는 일이었다! 문자열로 입력받고 정수로 변환하는 것이 더 간단하다.
정리해보자면
0~9를 요소로 가지는, 세트 수를 셀 배열 count 를 선언한 후
int num = n[i] - '0' 로 문자열로 입력받은 배열의 각 요소를 정수로 바꿔준다.
int() 를 이용해 각 요소를 정수로 바꿔준다. 나머지 로직은 동일하며, 맨 마지막에 count 배열에서 최댓값을 구할 때 max() 를 이용해 더 간단하게 구할 수 있다는 차이점이 있다.
#include <stdio.h>
#include <string.h>
int main() {
char n[101];
scanf("%s", n);
int count[10] = {0};
for (int i = 0; i < strlen(n); i++) {
int num = n[i] - '0';
if (num == 6 || num == 9) {
if (count[6] <= count[9])
count[6]++;
else
count[9]++;
}
else
count[num]++;
}
int max = 0;
for (int i = 0; i < 10; i++) {
if (count[i] > max)
max = count[i];
}
printf("%d\n", max);
return 0;
}
n = input()
count = [0] * 10
for char in n:
num = int(char)
if num == 6 or num == 9:
if count[6] <= count[9]:
count[6] += 1
else:
count[9] += 1
else:
count[num] += 1
res = max(count)
print(res)