본문 바로가기
알고리즘/문자와 문자열

10545 뚜기뚜기메뚜기

by tryotto 2020. 1. 6.
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