1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | #include <stdio.h> #include <string.h> int dial[10] = { 0 }; void press(char c, char bef) { if (97 <= (int)c && (int)c < 100) { if (97 <= (int)bef && (int)bef < 100) printf("#"); int num = (int)c - 97; for (int i = 0; i <= num; i++) { printf("%d",dial[2]); } } else if (100 <= (int)c && (int)c < 103) { if (100 <= (int)bef && (int)bef < 103) printf("#"); int num = (int)c - 100; for (int i = 0; i <= num; i++) { printf("%d", dial[3]); } } else if (103 <= (int)c && (int)c < 106) { if (103 <= (int)bef && (int)bef < 106) printf("#"); int num = (int)c - 103; for (int i = 0; i <= num; i++) { printf("%d", dial[4]); } } else if (106 <= (int)c && (int)c < 109) { if (106 <= (int)bef && (int)bef < 109) printf("#"); int num = (int)c - 106; for (int i = 0; i <= num; i++) { printf("%d", dial[5]); } } else if (109 <= (int)c && (int)c < 112) { if (109 <= (int)bef && (int)bef < 112) printf("#"); int num = (int)c - 109; for (int i = 0; i <= num; i++) { printf("%d", dial[6]); } } else if (112 <= (int)c && (int)c < 116) { if (112 <= (int)bef && (int)bef < 116) printf("#"); int num = (int)c - 112; for (int i = 0; i <= num; i++) { printf("%d", dial[7]); } } else if (116 <= (int)c && (int)c < 119) { if (116 <= (int)bef && (int)bef < 119) printf("#"); int num = (int)c - 116; for (int i = 0; i <= num; i++) { printf("%d", dial[8]); } } else { if (119 <= (int)bef) printf("#"); int num = (int)c - 119; for (int i = 0; i <= num; i++) { printf("%d", dial[9]); } } } int main() { char str[105] = { 0 }; for (int i = 1; i <= 9; i++) { int reverse; scanf("%d", &reverse); dial[reverse] = i; } scanf("%s", &str); int len = strlen(str); for (int i = 0; i < len; i++) { if (i > 0) press(str[i], str[i - 1]); else press(str[i], 0); } } | cs |
문자열을 CASE문 분류해서 문제를 해결했고,
고장난 다이얼을 해결해주기 위해 reverse을 이용한 dial 배열로 처리를 했다.
case 문이 너무 길어져서 지저분한데, 더 깔끔한 방법은 없을지 고민해봐야겠다.
'알고리즘 > 문자와 문자열' 카테고리의 다른 글
9971 The Hardest Problem Ever (0) | 2020.01.07 |
---|---|
4659 비밀번호 발음하기 (0) | 2020.01.07 |
3077 임진왜란 (0) | 2020.01.06 |
4949 균형잡힌 세상 (0) | 2020.01.06 |
9933 민균이의 비밀번호 (0) | 2020.01.06 |