백준/C++

[백준] 5622번: 다이얼 | C++ 풀이

성실한 당근농부 2023. 5. 18. 10:13

# 문제

할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

 


 

# 풀이

solved.ac 기준 브론즈 2에 해당하는 문자열 문제!

두 가지 방법으로 풀어볼 수 있을 것 같다.

하나씩 차근차근 소스코드를 확인해보자.

 

 

# 1

#include <iostream>
using namespace std;

int main(){    
    int time = 0;
    string call;
    cin >> call;
    
    for(int i=0; i<call.length(); i++){
        if(65 <= call[i] && call[i] <= 67) time += 3;
        else if(68 <= call[i] && call[i] <= 70) time += 4;
        else if(71 <= call[i] && call[i] <= 73) time += 5;
        else if(74 <= call[i] && call[i] <= 76) time += 6;
        else if(77 <= call[i] && call[i] <= 79) time += 7;
        else if(80 <= call[i] && call[i] <= 83) time += 8;
        else if(84 <= call[i] && call[i] <= 86) time += 9;
        else time += 10;
    }

    cout << time;
    
    return 0;
}

 

첫번째 방법은 if문을 통해 한 숫자에 해당하는 알파벳을 나눠놓고 시간을 계산하기!

조건문은 call[i] == 'A' && call[i] == 'B' && call[i] =='C' 와 같은 식으로 입력하는 것보다 아스키 코드 값을 통해 범위를 지정해주는 게 편할 것 같아 정답 코드처럼 작성해주었다.

 

 

# 2

#include <iostream>
using namespace std;

int main(){  
    int time[26] = {3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10};
    int sum = 0;
    string call;
    cin >> call;
    
    for(int i=0; i<call.length(); i++){
        sum += time[call[i] - 'A'];
    }

    cout << sum;
    
    return 0;
}

 

두번째 풀이는 배열에 시간 값을 담아놓고 계산하기!

이미 알파벳 별로 지정된 시간이 있으므로 배열을 통해 하나씩 매칭해주고,

지난 번 숫자의 합 풀이에서 아스키 코드 값을 통해 계산했던 것처럼 '대문자 알파벳' - 'A'를 통해 인덱스를 찾아준다.

그리고 sum 변수에 시간들을 담아 출력하면 끝!

 

 

 

풀이 1 결과
풀이 2 결과

 

짧은 코드라 메모리나 시간 차이는 나지 않지만 다양한 방법을 알아두면 좋으니까 여러가지로 풀어보자.

 

 


 

 

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 

728x90