[백준] 5622, 다이얼 돌리는 시간 구하기

YUN·2026년 2월 21일

C++

목록 보기
36/85


다이얼을 돌릴때 걸리는 총 시간을 구하는 문제이다.

1을 누를때 2초가 걸리고, 숫자가 1씩 증가할때 마다 걸리는 시간도 1씩 증가한다.

또한 주요 특징으로 A,B,C,,,,MNO 까지는 3개의 알파벳을 단위로 숫자가 정해지는데, P~Z 까지는 4개,3개, 4개 단위로 숫자가 정해진다.

1. 나의 풀이

#include <iostream>
#include <string>

using namespace std;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    string s;
    cin >> s;
    int sum = 0;
    int temp;
    for(char c : s) {
        if(c=='S' || c == 'V' || c == 'Y') c-=1;
        else if(c=='Z') c-=2;
        temp=(c-'A')/3+3;
        sum+=temp;
    }
    cout << sum;
    
    return 0;
}

우선 모두 3개의 알파벳을 기준으로 숫자가 정해진다고 생각하고, 이 조건이 성립하지않는 S, V, Y, Z 에 대해서만 아스키코드를 1또는 2를 빼주어 ~/3+3의 규칙이 항상 성립하도록 했다.

*string에 인덱스 접근시 char&로 반환한다. 나는 원본 수정이 아니라 그냥 값 확인만 하면 되므로 복사해서 저장만 하면 되었다. 그래서 char 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 };

	string s;
	int ans = 0;

	cin >> s;

	for (int i = 0; i < s.length(); i++) {
		ans += time[s[i] - 'A'];
	}
	
	cout << ans;
	

	return 0;
}

위의 풀이의 경우, 알파벳이 26개이니, SIZE가 26인 배열을 만들고

  • 배열의 인덱스 = 알파벳
  • 배열의 데이터 = 걸리는 시간

으로 저장해둔다.

아마 P~Z 구간의 불규칙성 때문에 애초에 배열에 그냥 걸리는 시간 값을 넣어두는 전략을 취한듯하다.

3. 느낀 점

어쨋든 나의 풀이든 다른 풀이든 char-char를 해서 몇 번째 알파벳인지를 알아내는 것이 문제의 핵심인듯하다.

이번에도 다른 사람의 풀이를 통해 새로운 관점을 익힐 수 있어서 유익했다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글