코딩테스트 (C#)

백준 3052 : 나머지 - C# 풀이

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

문제 사진

이번 문제도 간단하다.

10개의 숫자가 주어지는데, 그 숫자들을 42로 나눈 나머지들 중에서

서로 다른 숫자가 몇개인지를 출력하면 되는 문제이다.

 

뭐 라이브러리를 활용하지 않는다고 치면,

일단 각 숫자를 42로 나눈 나머지들을 배열로 저장하고

또 하나의 배열을 만들어서 새로 발견되는 숫자들을 저장한 후

배열의 길이를 출력하면 될 것 같다.

 

다만 이렇게하면 이중 for문이 나올 것 같고

이미 로직은 떠올릴 수 있다는 가정 하라면 라이브러리를 사용하는 것도

아이디어의 발전에 도움이 될거라 생각하여 다르게 진행헀다.

 

먼저 42로 나눈 값들을 저장한 다음 중복을 제거하고,

배열의 길이를 반환하기만 하면 되는 방법이다.

using System;
using System.Linq;

namespace unicoti {
    class Program {
        static void Main(string[] args) {
            int[] inputArr = new int[10];

            for(int i = 0; i < 10; i++) {
                int.TryParse(Console.ReadLine(), out inputArr[i]);
                inputArr[i] %= 42;
            }

            Console.WriteLine(inputArr.Distinct().Count());
        }
    }
}

 

말한대로 한 줄씩 읽어서 42로 나눈 나머지를 저장하고,

중복수를 제거하고 (Distinct) 길이(Count)를 반환하여 완성했다.


오늘의 느낀점)

역시 Linq가 편하긴 하다. 조금이라도 복잡한 알고리즘을 짜게 되면

단편적으로 배열이 필요하기 마련인데, 배열으로 알고리즘을 짜다보면

나오는 게 다 엇비슷하다. 중복 제거나 길이나 특정 수 세기 등 비슷한 코드가 필요한데

Linq가 모두 지원해줘서 편한 것 같다.

 

하루에 1문제씩 풀기 시작한 게 유니티는 나름대로 잘 다루지만

순수 C#은 모르는 것 같아서 그런거였는데 이제 순수 C#도 편하게 다루는 것 같다.

이렇게 되면 이제 목적이 해결된 것이기도 하다.

 

그래도 알고리즘 공부를 한다는 목적으로 계속 시도하겠다.

이번 년도가 끝날쯤이면 110문제 정도 더 풀었을텐데 어디쯤 가있을지 궁금하다.

어차피 취업하기 전까지는 시간이 있으니 하루에 한문제씩만 풀어도

그때쯤이면 1300문제는 넘어간다.

 

뭐 취업을 목표로 할 때 쯤이면 하루에 몇문제씩 풀고 있을테니 걱정은 없다.

다만 꾸준히 했으면 좋겠다.


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

 

끝.

반응형

댓글