코딩 테스트/백준

백준 - [단계별로 풀어보기 문자열] 5622 다이얼

devrabbit22 2026. 3. 12. 03:59

이번 문제는 문자열을 입력받아 각 알파벳에 대응되는 다이얼 시간을 계산하고, 그 값들의 합을 구하는 문제이다.

처음에는 switch case문을 사용해 알파벳을 각각 분기하는 방식으로 접근했다. 이 방법은 직관적으로 이해하기 쉽지만, 알파벳 그룹이 많다 보니 코드의 길이가 길어지는 단점이 있었다.

 

다른 방법을 고민하던 중 C#에서 char 타입이 내부적으로 정수 값으로 처리되기 때문에 대소 비교 연산이 가능하다는 점이 떠올랐다. 이를 활용해 if / else if 조건문을 사용하여 문자 범위로 분기하도록 구현했다.

예를 들어 입력 문자가 'A'부터 'C' 사이일 경우 inputData <= 'C' 조건을 이용해 sum += 3을 더하는 방식으로 처리했다. 이러한 방식으로 알파벳 그룹의 범위를 조건문으로 나누어 각 다이얼 시간을 누적하도록 구현하였다.

 //백준 5622번 다이얼
 string inputData = Console.ReadLine();
 int sum = 0;

 // 배열 매핑으로 풀기
 /*
 int[] dial = { 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 };

 foreach (char c in inputData)
 {
     sum += dial[c - 'A'];
 }
 */
 //if else로 푸는 방법
 foreach (char c in inputData)
 {
     if (c <= 'C')
         sum += 3;
     else if(c <= 'F')
         sum += 4;
     else if(c <= 'I')
         sum += 5;
     else if(c <= 'L')
         sum += 6;
     else if(c <= 'O')
         sum += 7;
     else if(c <= 'S')
         sum += 8;
     else if(c <= 'V')
         sum += 9;
     else
         sum += 10;
 }
 Console.WriteLine(sum);

 //Switch Case로 풀기
 /*
 foreach (char c in inputData)
 {
     switch (c)
     {
         case 'A':
         case 'B':
         case 'C':
             sum += 3;
             break;

         case 'D':
         case 'E':
         case 'F':
             sum += 4;
             break;

         case 'G':
         case 'H':
         case 'I':
             sum += 5;
             break;

         case 'J':
         case 'K':
         case 'L':
             sum += 6;
             break;

         case 'M':
         case 'N':
         case 'O':
             sum += 7;
             break;

         case 'P':
         case 'Q':
         case 'R':
         case 'S':
             sum += 8;
             break;

         case 'T':
         case 'U':
         case 'V':
             sum += 9;
             break;

         case 'W':
         case 'X':
         case 'Y':
         case 'Z':
             sum += 10;
             break;
     }
 }
 */

출력 결과1
출력 결과2

추가로 다른 사람들의 풀이를 확인하기 위해 C/C++로 작성된 코드를 살펴보았다.
여러 풀이 중에서는 알파벳을 배열의 인덱스와 매핑하여 각 문자에 해당하는 다이얼 시간을 더하는 방식으로 구현한 경우도 많았다. 이러한 방식은 조건문을 사용하는 방법보다 코드가 간결해진다는 장점이 있다고 생각한다.

또한 알파벳이 순서대로 정렬되어 있다는 점을 이용하면 문자 범위 비교를 통해 보다 간결한 코드로 문제를 해결할 수 있었다.

 

이를 통해 하나의 문제라도 다양한 방식으로 접근할 수 있으며, 상황에 따라 코드의 가독성과 간결성을 고려하여 적절한 방법을 선택하는 것이 중요하다는 것을 알 수 있었다.