C#/C# (백준)

[C#] 백준 알고리즘 25304번, 영수증

서니션 2022. 12. 29. 16:22
728x90
반응형

using System;

namespace codingstudy
{
    class Program
    {
        static void Main()
        {
            // 영수증에 적힌 총 금액 입력
            int total = int.Parse(Console.ReadLine());
            // 영수증에 적힌 구매한 물건의 종류의 수 N
            int n = int.Parse(Console.ReadLine());
            // 금액 맞는 지 비교할 int 
            int comp = 0;

            // n만큼 개수와 가격을 입력할 수 있도록 작성
            for (int i=0; i< n; i++)
            {
                // 개수와 가격 입력
                int[] pro = Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
                // 계산
                comp += pro[0] * pro[1];
            }

            // 개수와 가격이 일치하면 Yes, 않으면 No
            if (total == comp)
                {
                    Console.WriteLine("Yes");
                }
                else
                {
                    Console.WriteLine("No");
                }   
        }
    }
}

 

문법을 아직 잘 몰라 이틀 고민하다 결국 답을 봐버리고 풀었다. 

그래서 실패 요인을 적으며 다시 공부해보려고 한다.

 

1. string으로 이차원 배열을 선언했음

- 공백 Split 나눠야하니까 string으로 하고 나중에 int.Parse로 바꿔주어야 한다고 생각했음

- [개수,물건] 으로 저장된다고 생각해서 string[,] 이차원 배열로 선언함;


2. 계산 식을 저장할 변수 안 만들었음

- if문에 계산식 때려 박았는데.. 다른 코드를 보니까 계산식을 저장할 변수를 만드는게 당연히 깔끔했다

- 그리고 for문에 넣을 생각도 못함 ㄱ-;; 이러니까 한 줄에 하나씩 계산 된 값이 나왔지...

 

3. Array.ConvertAll을 쓸 생각 못함(애초에 몰랐다ㅠ 그래서 int.Parse는 앞에만 오는 줄..)

- 배열 형식 변환할 때 매우 유용하다고 한다..

 

Array.ConvertAll( 변환할 배열, 변환할 형식 )

 

이는 주로 다음과 같은 방식으로 사용된다.

string[] s = Console.ReadLine().Split();
int[] score = Array.ConvertAll(s, int.Parse);

 

이렇게 작성을 하게되면

사용자가 입력한 내용을 공백을 기준으로 잘라서 string배열에 저장하고

이 배열을 모두 int형태로 바꿔서 다시 새로운 배열에 저장하게 된다.

이제 매번 형식변환할 필요없이 간단하게 끝낼 수 있다.

(출처 : 오늘코딩 블로그 https://coding-of-today.tistory.com/105)

728x90
반응형