728x90
1. 문제
https://www.acmicpc.net/problem/5622
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
www.acmicpc.net
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
비주얼 스튜디오 - 위치를 기록하는 동안 액세스 위반이 발생했습니다. scanf_s 오류
앞서 말한 바와 같이 이 코드는 이상하게 비주얼 스튜디오에선 실행 시 콘솔이 꺼져버리고 디버깅을 해보면...
blog.naver.com
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 |