하................
어렵지 않은 문제인데 제가 허튼짓을 해서 한참 걸린 문제입니다.
Case #1: 이렇게 출력해야 하는데
CASE #1: 이렇게 출력하고 있었네요.....
맞왜틀 40분 동안 하다가 찾아서 고쳐서 맞았습니다.
문제를 일단 보시면 저렇게 무작위로 섞여있는 문자열에서
zero one two three four five six seven eight nine 이 몇 개 들어있는지 찾으면 되는 문제입니다.
잘 보시면 각 단어에 하나밖에 없는 알파벳이 있습니다.
예를 들면
zero에서 z는 0~9에서 유일하죠 ?
four에서 u도 유일합니다.
제가 푼 방법은
1. 알파벳의 개수를 전부 더한 다음에
2. (0으로 예를 들면) z 1개당 z, e, r, o를 각각 하나씩 빼주고
3. brr[0]에 1을 더합니다.
이런 식으로 0, 4, 5, 7 . . . . 순으로 지워줬습니다.
숫자 4 다음에 5를 f로 찾을 수 있는 이유는 4에서 5를 제외한 f가 전부 삭제되었으니 남은 f는 five에서의 f 뿐이겠죠?
마지막에 brr[0] ~ brr[9]까지 배열 안에 더해진 숫자만큼 해당 숫자를 출력해주면 됩니다.
정말 생각도, 코딩으로 구현도 제대로 했지만 출력할 때 오타 때문에 시간 정말 오래 소비했습니다.
여러분은 그럴 일 없겠지만 절대 저 같은 실수 하지 마세요!
참 부끄럽네요...
마지막으로 반례 남기겠습니다.
3
VVVFFFIIIEEEOONEZER
OONEZER
OWT
Case #1: 01555
Case #2: 01
Case #3: 2
2
VVVFFFIIIEEEOONEZERVVVFFFIIIEEEOONEZERVVVFFFIIIEEEOONEZERVVVFFFIIIEEEOONEZERVVVFFFIIIEEEOONEZER
NOE
Case #1: 0000011111555555555555555
Case #2: 1
2
NNNNNNNNNNEEEEEEIIIIOO
OOIIIIEEEEEENNNNNNNNNN
Case #1: 119999
Case #2: 119999
2
INNEINNEIINNEENNNNEEOO
WTO
Case #1: 119999
Case #2: 2
제가 해봤던 반례들입니다.
모두 화이팅
#include <stdio.h>
#include <string.h>
int main() {
int t;
char s[2000] = {};
int arr[100] = {}, brr[10] = {};
scanf("%d", &t);
for(int i = 0; i < t; i++) {
scanf("%s", s);
for(int i = 0; i < strlen(s); i++) {
char temp = s[i];
arr[temp]++;
}
while(arr['Z'] > 0) {
brr[0]++;
arr['Z']--;
arr['E']--;
arr['R']--;
arr['O']--;
}
while(arr['U'] > 0) {
brr[4]++;
arr['F']--;
arr['O']--;
arr['U']--;
arr['R']--;
}
while(arr['F'] > 0) {
brr[5]++;
arr['F']--;
arr['I']--;
arr['V']--;
arr['E']--;
}
while(arr['V'] > 0) {
brr[7]++;
arr['S']--;
arr['E']--;
arr['E']--;
arr['V']--;
arr['N']--;
}
while(arr['X'] > 0) {
brr[6]++;
arr['S']--;
arr['I']--;
arr['X']--;
}
while(arr['W'] > 0) {
brr[2]++;
arr['T']--;
arr['W']--;
arr['O']--;
}
while(arr['G'] > 0) {
brr[8]++;
arr['E']--;
arr['I']--;
arr['G']--;
arr['H']--;
arr['T']--;
}
while(arr['H'] > 0) {
brr[3]++;
arr['T']--;
arr['E']--;
arr['H']--;
arr['R']--;
arr['E']--;
}
while(arr['I'] > 0) {
brr[9]++;
arr['N']--;
arr['I']--;
arr['N']--;
arr['E']--;
}
while(arr['O'] > 0) {
brr[1]++;
arr['O']--;
arr['E']--;
arr['N']--;
}
printf("Case #%d: ", i+1);
for(int i = 0; i < 10; i++) {
while(brr[i] > 0) {
printf("%d", i);
brr[i]--;
}
}
printf("\n");
}
}
'백준' 카테고리의 다른 글
[C언어/C++] 15927번 회문은 회문아니야!! + 반례 모음 (0) | 2022.05.09 |
---|---|
[C언어/C++] 1920번 수 찾기 + 반례 모음 (0) | 2022.05.09 |
[C언어] 백준 | 17404번 RGB거리 2 (0) | 2022.04.29 |
[C언어] 백준 | 1484번 다이어트 (0) | 2022.04.25 |
[C언어] 백준 | 1644번 소수의 연속합 (0) | 2022.04.16 |