알고리즘/BaekJoon

백준 5622 : 다이얼

꾸준하게 :) 2020. 3. 10. 20:56

문제 링크입니다 https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.

www.acmicpc.net

간단한 문자열 처리 문제였습니다.

 

 

→ 문제에 나와있는 그림을 보면 숫자 1을 걸려면 2초가 필요하고 1보다 큰 수를 거는 데는 한 칸 옆으로 숫자가 커질 때마다 1초씩 더 걸립니다.

 

→ 즉, 2를 걸려면 3초, 3을 걸려면 4초... 9를 걸려면 10초가 걸리게 됩니다.

 

→ 각 번호에는 알바벳이 쓰여 있는데 알파벳 대문자로 이루어진 단어가 입력으로 주어질 때, 그 알파벳들에 맞게 전화를 걸기 위한 시간을 출력하는 문제였습니다. 

 

→ 결국, (ABC)는 3초, (DEF)는 4초, ... (PQRS)는 8초, (TUV)는 9초, (WXYZ)는 10초가 걸리는데 이 알파벳들에서 'A'에 해당하는 아스키코드값을 빼면 (0,1,2)는 3초, (3,4,5)는 4초, ... (15,16,17,18)은 8초, (19,20,21)은 9초, (22,23,24,25)는 10초 이므로 S, V, Y, Z를 뺀 나머지는 (3으로 나눈 몫 + 3)초가 걸리게 됩니다.

 

 

[소스코드]

 

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
#include<iostream>
#include<string>
using namespace std;
 
string s;
 
int main(void) {
 
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    cin >> s;
    int ans = 0;
 
    // string의 문자를 하나씩 확인합니다
    for (char c : s) {
 
        // 문자에서 'A'값을 뺀 값을 3으로 나눈 몫 + 3
        ans += (c - 'A'/ 3 + 3;
 
        // S, V, Y, Z중 하나이면 -1
        if (c == 'Z' || c == 'Y' || c == 'V' || c == 'S') ans--;
    }
    printf("%d", ans);
 
    return 0;
}
cs

 

'알고리즘 > BaekJoon' 카테고리의 다른 글

백준 15657 : N과 M(8)  (0) 2020.03.11
백준 15656 : N과 M(7)  (0) 2020.03.11
백준 1157 : 단어 공부  (0) 2020.03.10
백준 1152 : 단어의 개수  (0) 2020.03.10
백준 10942 : 팰린드롬?  (0) 2020.03.10