[伯俊/C]5622番ダイヤル


白駿5622解題C言語
https://www.acmicpc.net/problem/5622

トラブルシューティングプロセス

  • の2 D配列の各番号に対応するアルファベットを指定します.
  • で入力された文字と2 D配列に一致する文字の行インデックス+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 D配列を初期化

    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のpandaは2次元で存在していた.
    それだけに、各要素のアクセスは簡単だと思います.ちょうど、このような方法でこの問題にアクセスするのはどうなのかと思っていたので、2次元配列でアクセスすると、想像以上に問題を解決しやすいようです.😎