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

# 풀이
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 변수에 시간들을 담아 출력하면 끝!


짧은 코드라 메모리나 시간 차이는 나지 않지만 다양한 방법을 알아두면 좋으니까 여러가지로 풀어보자.
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 | C++ 풀이 (2) | 2023.05.20 |
---|---|
[백준] 11718번: 그대로 출력하기 | C++ 풀이 (0) | 2023.05.19 |
[백준] 11720번: 숫자의 합 | C++ 풀이 (0) | 2023.05.17 |
[백준] 1546번: 평균 | C++ 풀이 (0) | 2023.05.16 |
[백준] 10811번: 바구니 뒤집기 | C++ 풀이 (0) | 2023.05.14 |