코딩테스트 (C#)

백준 10810 : 공 넣기 - C# 풀이

UniCoti-sub 2024. 9. 10.
반응형

문제 사진

오랜만에 생각이 필요한 문제가 나왔다.

사실 이해만 하면 그 이후의 알고리즘 자체는 쉬운 편이나 이 문제를 이해하는 것이

까다롭다. 백준을 풀면서 가장 불만인 점이다. 너무 돌려서 말하거나 이해를 도울 자료가 없다.

 

뭐 내가 새로운 방법을 생각해야 하는 거면 모르겠는데

푸는 방법이 명확하면서도 굳이굳이 상황 설정해가면서 길게 풀어져 있는데

마음에 안든다. 일단 설명부터 시작하겠다.

 

바구니가 n개 주어지고 공을 넣을 기회가 m번 주어진다.

공을 넣는 과정은 1,2,2 이런 형태로 되어 있는데, 

1번 바구니부터 2번 바구니까지 2번 공을 넣는다는 뜻이다.

 

만약에 초기 바구니의 상태를 0으로 가정하면

0 2 2 0 0 이 된다. (n=5라서 바구니가 5개일때)

 

이걸 여러번 반복한 다음 출력하면 되는 문제이다.

주의할 점은 인덱스의 문제이다. 1을 빼야할지 더해야 할지 나둬야할지,

<, >에 등호(=)를 붙일지말지가 꽤 중요한 문제이다.

 

using System;

namespace unicoti {
    class Program {
        static void Main(string[] args) {
            string input = Console.ReadLine();
            int.TryParse(input.Split(' ')[0], out int n);
            int.TryParse(input.Split(' ')[1], out int m);
            
            int[] array = new int[n];
            
            for(int i = 0; i < m; i++) {
                string[] inputArr = Console.ReadLine().Split(' ');
                int.TryParse(inputArr[0], out int first);
                int.TryParse(inputArr[1], out int last);
                int.TryParse(inputArr[2], out int k);
                
                for(int j = first; j <= last; j++) {
                    array[j-1] = k;
                }
            }

            for(int o = 0; o < array.Length; o++) {
                Console.Write($"{array[o]} ");
            }
        }
    }
}

 

나는 이렇게 코드를 구성했다.

우선 n과 m을 저장해주었고 공을 넣는 횟수(m) 만큼

for문을 돌려서 공을 넣는 과정을 코드로 써줬다.

 

세개의 숫자를 읽은 다음에 first부터 last까지 k를 넣어주면 된다.

나는 이중 for문으로 간단하게 구현할 수 있었다.

 

마지막은 for문으로 각 배열을 출력해주되 형식을 맞추기 위해서

뒤에 띄어쓰기를 포함하기 위해 $ 연산자를 사용해서 완성했다.


오늘의 느낀점)

문제 자체는 어렵지 않았는데 제발 좀 문제를 돌려서 말하지 않았으면 좋겠다.

문제 이해가 어려운 문제가 몇몇 보이는데, 특별한 예시(게임)을 사용해서

처음 봤을때 재미는 있지만 그 게임을 모르면 문제를 못 푸는 경우가 생긴다.

 

이런 문제를 만나면 차라리 먼저 문제 이해를 위해서

ai나 글들을 찾아보고 내 방식대로 코딩하는 것도 좋을 것 같다.


이상으로 도움이 되었길 바라며,

 

끝.

반응형

댓글