
#include <stdio.h>
int main(void)
{
int dif, sec = 0;
char c;
while ((c = getchar()) != '\n')
{
dif = c - 'A';
if(dif < 'S'-'A')
sec += (dif / 3) + 3;
else if(dif < 'Z'-'A') // from S
sec += ((dif - 1) / 3) + 3;
else
sec += ((dif - 2) / 3) + 3;
}
printf("%d", sec);
return 0;
}
- switch문을 사용해서 풀 수도 있었겠지만, A-Z까지 26개의 라인을 소비하고 싶지 않았다.
- S 혹은 Z 이전까지는 하나의 다이얼에 3개의 알파벳이 들어가기 때문에 정수의 나눗셈과 조건을 적당히 활용해 풀었다
- 문자열로 입력받아 다시 쪼개고 하는 건 효율적이지 않은 것 같아
getchar로 버퍼에 들어있는 char 하나씩을 꺼내 evaluate한다- dif는 알파벳 순서이다.
- collating sequence에 따라 decimal value가 달라지기 때문에, symbolic char을 직접 넣어준다 ex. 'A'
- 'S'와 'Z'가 하나 작은 값을 가진 다이얼에 들어가기 때문에, 각각 구하는 식에서 -1해주었다
'문제풀이' 카테고리의 다른 글
[C언어] 백준 1316 그룹 단어 체커 (0) | 2021.12.24 |
---|---|
[C언어] 백준 2941 크로아티아 알파벳 (0) | 2021.12.22 |
[C언어] 백준 2908 상수 (0) | 2021.12.22 |
[C언어] 백준 1152 단어의 개수 (0) | 2021.12.22 |
[C언어] 백준 1157 단어공부 (0) | 2021.12.22 |