C#/백준 알고리즘
2022.01.20 [백준] C# 나머지
ian's coding
2022. 1. 20. 15:53
728x90
반응형
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
예제 입력 1 복사
1
2
3
4
5
6
7
8
9
10
예제 출력 1 복사
10
각 수를 42로 나눈 나머지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이다.
예제 입력 2 복사
42
84
252
420
840
126
42
84
420
126
예제 출력 2 복사
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
using System;
class Program{
static void Main(){
int[] num = new int[10];
bool[] isremain = new bool[42];
for(int i=0;i<10;i++){
int a = int.Parse(Console.ReadLine());
num[i]=a%42;
isremain[num[i]]=true;
}
int cnt=0;
for(int i=0;i<isremain.Length;i++){
if(isremain[i])
cnt++;
}
Console.WriteLine(cnt);
}
}
|
cs |
많은 시도를 했지만 풀리지 않아 구글링 하여 bool배열을 보게 되었고 여기서 왜 이 생각을 하지 못했나 하는 생각이 들었다... 나머지에 대한 경우의 수를 bool배열을 사용하여 나머지인 숫자를 중복과 상관없이 true로 표시하여 중복하지 않은 나머지의 개수를 출력하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
using System;
using System.Collections.Generic;
using System.Linq;
class Program{
static void Main(){
List<int> num = new List<int>();
for(int i=0;i<10;i++){
int a = int.Parse(Console.ReadLine());
num.Add(a%42);
}
num=num.Distinct().ToList();
Console.WriteLine(num.Count);
}
}
|
cs |
위의 코드는 잘 사용은 못하지만 사용해봤던 List를 사용해도 쉽게 되지않을까라는 생각이 들어 시도해 보았다. List를 이용하여 10개의 나머지들을 List에 담고 Distinct()를 이용해 List안의 중복값을 제거한 뒤, Count를 사용해 중복된 값을 제외한 나머지들의 개수를 출력했다. List를 사용하여 숙련도를 늘리면 좋을거 같다.
728x90
반응형