백준 5622번 다이얼 문제 풀기 C 언어
#include <stdio.h>
#include <string.h>
char data[8][5] = {"ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"};
int calcSec(char *dial);
int searchNum(char dialAlpha);
int main(void)
{
char input[15];
scanf("%s", input);
printf("%d", calcSec(input));
return 0;
}
int searchNum(char dialAlpha)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 4; j++)
{
if (dialAlpha == data[i][j])
return i + 3;
}
}
return 0;
}
int calcSec(char *dial)
{
int len = strlen(dial);
int count = 0;
for (int i = 0; i < len; i++)
{
count += searchNum(dial[i]);
}
return count;
}
char data[8][5] = {"ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"};
2~9 에 해당하는 숫자가 바로 행 인덱스 0~8 입니다
data[0] : ABC
data[1] : DEF
data[2] : GHI
data[3] : JKL
data[4] : MNO
data[5] : PQRS
data[6] : TUV
data[7] : WXYZ
int calcSec(char *dial)
{
int len = strlen(dial);
int count = 0;
for (int i = 0; i < len; i++)
{
count += searchNum(dial[i]);
}
return count;
}
입력받은 문자열의 길이 만큼 반복하면서 searchNum() 함수에서 반환 받는 값을 모두 더해 정답을 리턴합니다
int searchNum(char dialAlpha)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 4; j++)
{
if (dialAlpha == data[i][j])
return i + 3;
}
}
return 0;
}
예제입력 : WA 일 경우
W 는 data[7] 의 {WXYZ}에 포함이므로 7 + 3을 반환
A 는 data[0] 의 {ABC}에 포함이므로 0 + 3을 반환
문제를 풀면서 느낀점
전에는 1차원 배열만 쓰면서 모든 문제에 접근할때 1차원 배열만 생각하여 접근 했는데 python의 pandas를 생각해보면 2차원의 형태로 존재 합니다.
그렇게 되어있으니 각 요소에 접근이 간단했단 생각이 들었는데 마침 이 문제에 그런식으로 접근을 해보면 어떨까해서 2차원 배열로 접근을 했는데 생각보다 훨씬 쉽게 문제를 해결할 수 있었던것 같습니다 😎