1. 문제 상세
https://www.acmicpc.net/problem/5622
2. 문제 접근
문제에서 결국 숫자를 시간으로 보면 3, 4, 5 ... 10 까지의 숫자를 사용한다.
ABC는 3, DEF는 4, ... WXYZ는 10과 같이 매칭해야 한다.
이를 위해 아래와 같이 정수 배열을 생성해 각 알파벳에 맞도록 시간을 총 26개 저장한다.
int sec[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 };
그리고 문자열을 입력받고 각 알파벳을 아스키코드 값을 활용하여 정수 배열의 인덱스와 매치시키자.
A 를 입력받을 경우, A 아스키 코드값 65 에서 65를 빼 0으로 계산하여 정수 배열의 0번 인덱스를 참조, 값 3과 매치.
다른 문자도 마찬가지로 '문자' - 65 값으로 각 알파벳에 맞는 시간에 매치하자.
이제 입력받은 알파벳을 확인하여 해당 알파벳의 아스키 코드 계산 값을 정수 배열의 인덱스로 사용하여 결과에 시간을 더해준다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int time = 0, sec[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 };
string s;
cin >> s;
for(int i = 0; i < s.length(); i++) time += sec[s[i] - 65];
cout << time;
}
정수형 변수 time 을 선언하여 0으로 초기화하고, 크기가 26인 정수형 배열 sec 를 선언해 값을 초기화한다.
문자열 객체 s 를 생성한다.
cin 으로 문자열을 입력받아 s 에 저장한다.
for 문으로 i 가 0부터 문자열 s 의 길이보다 작을 때, 1씩 더하며 반복하도록 한다.
반복에서는 time 에 배열 sec 에서 문자열 s 의 i 번 인덱스의 문자에서 65를 뺀 값을 인덱스로 참조한 값을 더해준다.
반복이 끝나면 cout 으로 time 을 출력한다.
4. 성능 확인
5. 마무리
이번에도 아스키 코드를 활용하여 문자들을 배열 인덱스로 각 값에 매치하여 사용해보았다.
'백준 - 단계별로 풀어보기 > 문자열' 카테고리의 다른 글
[백준] 11718번 : 그대로 출력하기 | C++ (0) | 2023.09.26 |
---|---|
[백준] 2908번 : 상수 | C++ (0) | 2023.09.25 |
[백준] 1152번 : 단어의 개수 | C++ (0) | 2023.09.25 |
[백준] 2675번 : 문자열 반복 | C++ (0) | 2023.09.25 |
[백준] 10809번 : 알파벳 찾기 | C++ (0) | 2023.09.25 |