본문 바로가기
C#/C# : Baekjoon

[백준] C# : 나머지 (3052번)

by TODAYCODE 2021. 7. 29.
반응형

백준 단계별로 풀어보기 5단계 1차원배열 4번문제

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

문제의 핵심.

1. 리스트에 포함된 요소를 검사할 수 있는가?

2. 적절한 구조를 구현할 수 있는가?

 


 

이번 문제는 리스트에 Contains() 메소드를 사용할 줄 안다면 쉽게 풀 수 있는 문제다.

이걸 모른다면 과연 문제를 해결할 수 있을까? 라는 생각이 들기도하는 문제.

뭐 워낙 풀이에는 다양한 방법이 있으니, 

Contains() 메소드를 사용하지 않고도 풀 방법은 많겠지?

 

그러나 Contains()를 사용하는것이 가장 간단하기에 이번 풀이에서도 같은 방식을 사용했다.

 

 

입력을 받는 방식 자체가 한줄에 하나씩 10번 입력되므로,

for문을 10번 돌려서 입력되는 값을 곧장 42로 나눠서 나머지만 저장하는게 효율적이다.

 

 

그리고 배열에 저장된 요소들을 각각 비교해서

중복되지 않는 값들만 다른 리스트에 저장하고

그 리스트의  count를 출력하면

서로 다른 나머지의 갯수를 출력할 수 있다.

 

 

이렇게 보면 간단한 문제인데 다들 잘 풀었길 바란다.

 

 

 

 

 

정답 코드

using System;
using System.Collections.Generic;
using static System.Console;

namespace _1차원배열4
{
    class 나머지
    {
        static void Main(string[] args)
        {
            // 입력받을 숫자를 담기 위한 리스트 numbers 선언
            List<int> numbers = new List<int>();

            // 정답을 저장할 리스트 answer 선언
            List<int> answer = new List<int>();

            // 한줄에 숫자 하나씩 10번 입력되므로 for으로 입력받는다
            for (int i = 0; i < 10; i++)
            {
            // 숫자 입력받아서 곧장 42로 나눈 나머지를 numbers에 넣기
                numbers.Add(int.Parse(ReadLine()) % 42);
            }
            
            // numbers에 저장된 나머지 중에서 같은 숫자가 몇개인지 세기
            // 첫번째for문은 0부터 전체길이-1만큼, 두번째 for문은 1부터 끝까지돌려서 엇갈리게 만든다.
            for (int i = 0; i < numbers.Count-1; i++)
            {
                for (int j = i+1; j < numbers.Count; j++)
                {
                	// 두개를 비교했는데 동일한 값이라면 다음 루프로 넘어감
                    if (numbers[i] == numbers[j])
                    {
                        continue;
                    }
                    else // 동일한 값이 아니라면
                    {
                    	// answer 리스트에 해당 값이 포함되어있는지 검사함.
                        if (!answer.Contains(numbers[i]))
                        {
                        // 포함 되어있지 않으면 answer에 추가한다.
                            answer.Add(numbers[i]);
                        }
                    }
                }
            }
            // 위 과정이 끝나면 중복되지 않는 나머지들만 answer에 저장됨.
            // 그러나 마지막 숫자는 검사에 빠져있으므로 마지막 숫자만 따로 검사함.
            if (!answer.Contains(numbers[^1]))
            {
                answer.Add(numbers[^1]);
            }
            
            // answer 리스트의 총 개수를 출력하면 끝.
            WriteLine(answer.Count);
        }
    }
}

 

 

 

 

 

반응형

'C# > C# : Baekjoon' 카테고리의 다른 글

[백준] C# : OX퀴즈 (8958번)  (0) 2021.07.30
[백준] C# : 평균 (1546번)  (0) 2021.07.29
[백준] C# : 숫자의 개수 (2577번)  (0) 2021.07.29
[백준] C# : 최댓값 (2562번)  (0) 2021.07.27
[백준] C# : 최소, 최대 (10818번)  (0) 2021.07.26

댓글