백준

백준 5622번 c#

대왕군 2024. 1. 14. 22:02

내가 생각해낸 '복잡한' 방식

using System;

namespace Baekjoon
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //이번 문제는 아스키 코드를 이용해 해결할 것임
            //그리고 이 문제에서 주의해야 할점은 문제 다이얼 사진을 보면 0과 1에는 알파벳이 배정이 되어있지 않음
            //즉 다이얼에서 0과 1은 쓰지 않음

            //영어 입력받음
            string input = Console.ReadLine();
            //결과 초시간
            int resultSecond = 0;

            //A~Z는 65~90임
            //A를 뜻하는 index 65칸에 2를 넣고, Z를 뜻하는 index 90칸에 9를 넣는식으로 할거임
            int[] asciiBox = new int[91];
            //알파벳에 맞춰 asciiBox배열에 넣을 숫자 변수
            //0과 1은 쓰지 않으니 2부터 시작
            int dialNum = 2;

            //숫자와 영어가 매칭된 것에 규칙성이 없음
            //다른 숫자들은 영어가 3개씩 매칭되어있지만, 7과9는 4개씩 매칭되어있음
            //그러므로 asciiBox배열에 숫자를 매칭시킬때 조건을 붙이면서 매칭시킬거임
            for (int i = 65; i <= 90; i++)
            {
                //i가 다이얼 숫자가 바뀌는 분기점이되는 알파벳 D,G,J,M,P,T,W의 아스키코드일때
                //dialNum을 1증가 시킨뒤 asciiBox에 저장할거임(규칙성을 못찾아서 코드가 좀 지저분해졌음..)
                switch (i)
                {
                    case 68:
                        dialNum++;
                        break;
                    case 71:
                        dialNum++;
                        break;
                    case 74:
                        dialNum++;
                        break;
                    case 77:
                        dialNum++;
                        break;
                    case 80:
                        dialNum++;
                        break;
                    case 84:
                        dialNum++;
                        break;
                    case 87:
                        dialNum++;
                        break;
                }
                asciiBox[i] = dialNum;
            }

            //내가 적은 알파벳 길이만큼 반복
            for (int i = 0; i < input.Length; i++)
            {
                //아까 asciiBox와 dialNum을 매칭시킨 것을 이용할거임
                //입력한 알파벳들을 하나하나씩 아스키코드 번호로 변환하여
                //asciiBox의 index번호로 사용하여 다이얼번호를 가져올거임
                //이때 다이얼번호가 걸리는 초시간은 (다이얼번호 + 1)임
                //0은 어차피 안쓰니까 생각할 필요가 없음
                resultSecond += asciiBox[(int)input[i]] + 1;
            }

            //출력
            Console.WriteLine(resultSecond);

        }
    }
}

 

깔끔하고 간결한 방식

나는 char형과 char형을 비교하거나 char형과 int를 비교하여 아스키코드의 크기를 알아내는 방식이 가능하다는 사실을

이번에 처음 알게되었다.

아래는 링크 첨부

다이얼: 백준 5622번 (C#풀이, 7단계, 문자열) (tistory.com)

 

다이얼: 백준 5622번 (C#풀이, 7단계, 문자열)

규칙에 따라 문자에 대응하는 수를 출력하는 문제입니다. 목표 할머니는 전화번호를 문자로 기억합니다. 즉 어떤 단어를 생각하고 각 알파벳에 해당하는 숫자를 걸면됩니다. 또한 할머니는 숫

morm.tistory.com

[C#]백준 5622번 문제 풀이 :: 공부하는개미 (tistory.com)

 

[C#]백준 5622번 문제 풀이

# 문제 출제 사이트 https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net # 문제

antstudy.tistory.com

 

 

그리고 이건 좀 신기한 방식인데 switch문의 case쪽에 <=를 사용하고 있다

[백준] C# : 다이얼(5622번) (tistory.com)

 

[백준] C# : 다이얼(5622번)

백준 단계별로 풀어보기 7단계 8번문제 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 문제의 핵심 1.

coding-of-today.tistory.com

 

내가 사용하려 했더니 이런 경고문구가 떴다

'관계형 패턴'이라는 키워드가 나오는데 아마 설명으로 짐작해보니 c#이 업데이트되면서 새로운 기능이 추가된 것 같다.

나중에 한 번 알아봐야겠다.