# 문제
할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.
# 풀이
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 변수에 시간들을 담아 출력하면 끝!
짧은 코드라 메모리나 시간 차이는 나지 않지만 다양한 방법을 알아두면 좋으니까 여러가지로 풀어보자.
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 |