문제 출처: www.acmicpc.net/problem/5622
1. 코드
#include <stdio.h>
#include <string.h>
int NUM(int n);
int main(void)
{
char arr[15];
int i, j, sum = 0;
scanf("%s", arr);
for(i = 'A'; i <= 'Z'; i++)
{
for(j = 0; j < strlen(arr); j++)
{
if(i == arr[j])
sum += NUM(i);
}
}
sum += strlen(arr);
printf("%d", sum);
return 0;
}
int NUM(int n)
{
switch(n)
{
case 'A':
case 'B':
case 'C':
return 2;
case 'D':
case 'E':
case 'F':
return 3;
case 'G':
case 'H':
case 'I':
return 4;
case 'J':
case 'K':
case 'L':
return 5;
case 'M':
case 'N':
case 'O':
return 6;
case 'P':
case 'Q':
case 'R':
case 'S':
return 7;
case 'T':
case 'U':
case 'V':
return 8;
default:
return 9;
}
}
2. 문제 해결 과정
먼저 문자열을 입력받고 이중 반복문을 이용하여 알파벳과 입력한 문자열을 하나씩 비교하면서 맞는게 존해할 때 NUM이라는 함수를 이용하여 해당되는 알파벳에 맞는 수를 반환하여 그 수를 sum이라는 변수에 저장한다. 그리고 숫자의 갯수까지 sum의 변수에 저장하고 그것을 출력하면 끝이다.
3. 느낀 점
처음 이 문제를 if 문과 else if 문을 이용하여 비교를 했는데 코드가 많이 길어지고 정리된 느낌이 전혀없어서 알파벳을 판단하는 조건문을 따로 함수로 만들어서 main 함수를 깔끔하게 하였고, if 문과 else if 문보다는 switch 문이 더 깔끔해보일 거라는 생각에 switch 문으로 다시 짜고 65를 아스키코드로 A였기에 처음에는 숫자를 넣다가 가독성에 있어서 조금 불편해보여서 'A'로 고쳐썼다.
요즘은 문제를 푸는 것도 푸는 것이지만 나름대로 코드를 깔끔해보이게 짜볼려고 조금씩 노려해 보고 있다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1316번: 그룹 단어 체커 C언어 (0) | 2020.01.05 |
---|---|
백준 알고리즘 2941번: 크로아티아 알파벳 C언어 (4) | 2020.01.03 |
백준 알고리즘 2908번: 상수 C언어 (0) | 2019.12.29 |
백준 알고리즘 1152번: 단어의 개수 C언어 (4) | 2019.12.28 |
백준 알고리즘 1157번: 단어 공부 C언어 (4) | 2019.12.27 |