나머지
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력 1 2 3 4 5 6 7 8 9 10
출력 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static void main(String[] args) {
//42로 나누었을때 서로다른 나머지가 몇개 있는지 출력한다.
Scanner scn = new Scanner(System.in);
int i,j;
int cnt = 10;
int[] arr = new int[10];
int[] arr2 = new int[10];
for(i=0; i<10; i++)
{
arr[i]=scn.nextInt();
}
for(i=0; i<10; i++)
{
arr2[i]=arr[i]%42;
}
for(i=1; i<arr2.length; i++)
{
int target = arr2[i]; // key값
j = i-1; // 앞에 비교할 대
while(j >= 0 )
{
if(arr2[j] == target) //비교할대상이랑 key값이랑 같다면
{
cnt--;
break;
}
j--;
}
}
System.out.println(cnt);
처음엔 선택정렬을 사용해서 구현했었다.
비교할대상의 중복값을찾을때
대표값, 비교할값이 증가하면서 대표값이 증가되면서 증가된 대표값의 전자리수를 비교할수없었다.
따라서 서치끝에 삽입정렬을 넣으면 뒤에서 앞값까지 중복체크를 해줄수있었다.