[백준/C] 5622번 다이얼

enKODING·2022년 1월 3일
0

백준 5622번 다이얼 문제 풀기 C 언어

https://www.acmicpc.net/problem/5622

문제 해결 과정

  1. 2차원 배열에 각각의 번호에 해당하는 알파벳을 할당합니다.
  2. 입력받은 문자와 2차원 배열에 일치하는 문자의 행 인덱스+3을 반환합니다.
  3. 반환받은 행 인덱스 값을 모두 합하면 답이 나옵니다
#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;
}

전역 변수로 어디서든 접근할 수 있도록 2차원 배열을 초기화

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


시간을 계산하는 함수 calcSec()

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() 함수에서 반환 받는 값을 모두 더해 정답을 리턴합니다


입력받은 문자열의 각각의 문자들마다 몇 초씩 걸리는지 반환하는 함수 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차원 배열로 접근을 했는데 생각보다 훨씬 쉽게 문제를 해결할 수 있었던것 같습니다 😎

profile
HeLlO WoRlDs!

0개의 댓글