728x90
1. 문제
https://www.acmicpc.net/problem/5622
2. 접근
알파벳 입력에 따라 해당되는 num이 달라지고, 입력할 때마다 t가 증가한다
만약에 WA를 입력 받았다면, W에 해당되는 num은 9이고 t는 10이다.
A에 해당되는 num은 2이고 t는 3이다. 따라서 결과는 13
int dial(int w) {
int num, t;
if (w == 'A' || w == 'B' || w == 'C') {
num = 2;
t = 3;
}
if (w == 'D' || w == 'E' || w == 'F') {
num = 3;
t = 4;
}
if (w == 'G' || w == 'H' || w == 'I') {
num = 4;
t = 5;
}
if (w == 'J' || w == 'K' || w == 'L') {
num = 5;
t = 6;
}
if (w == 'M' || w == 'N' || w == 'O') {
num = 6;
t = 7;
}
if (w == 'P' || w == 'Q' || w == 'R' || w == 'S') {
num = 7;
t = 8;
}
if (w == 'T' || w == 'U' || w == 'V') {
num = 8;
t = 9;
}
if (w == 'W' || w == 'X' || w == 'Y' || w == 'Z') {
num = 9;
t = 10;
}
}
처음에는 dial 함수를 작성해 w를 입력받고 해당되는 문자에 따라 t 값을 주었다.
이것보다는 간단하게 할 수 없을지 고민하다가 최종풀이를 제출했다.
3. 문제풀이
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
char num[15], t = 0;
scanf_s("%s", &num, sizeof(num));
int len = strlen(num);
for (int i = 0; i < len; i++) {
if (num[i] >= 'A' && num[i] <= 'C') t += 3;
if (num[i] >= 'D' && num[i] <= 'F') t += 4;
if (num[i] >= 'G' && num[i] <= 'I') t += 5;
if (num[i] >= 'J' && num[i] <= 'L') t += 6;
if (num[i] >= 'M' && num[i] <= 'O') t += 7;
if (num[i] >= 'P' && num[i] <= 'S') t += 8;
if (num[i] >= 'T' && num[i] <= 'V') t += 9;
if (num[i] >= 'W' && num[i] <= 'Z') t += 10;
}
printf("%d", t);
}
** scanf_s 작성시 오류가 떠서 sizeof(num)을 추가해주었다.
scanf_s는 추가적으로 변수의 크기를 매개 변수로 사용해 입력받은 인자의 크기가 오버런을 발생시킬 수 있는지 판별하여 사용자에게 알려준다.
참고
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=onnelim7791&logNo=221550696178
728x90
'PS > BOJ' 카테고리의 다른 글
[C] 백준 1550 : 16진수(feat.자료형) (0) | 2022.05.26 |
---|---|
[C] 백준 2960 : 에라토스테네스의 체 (0) | 2022.05.24 |
[C] 백준 2908 : 상수 (0) | 2022.05.24 |
[C] 백준 1152 : 단어의 개수 (0) | 2022.05.24 |
[C] 백준 1978 : 소수찾기 (0) | 2022.05.20 |