(백준)3052 나머지 문제 풀기

DevSeoRex·2022년 6월 7일
0

백준

목록 보기
7/12

10개의 자연수를 입력받고 42로 각각 나누었을때, 나머지가 중복되지 않고 서로 다른 값이 몇개 존재하는지를 출력하는 것이 문제였다.

Step1.

Scanner sc = new Scanner(System.in);
		int[] arr1 = new int[10];
		int[] arr2 = new int[10];
		boolean[] arr3 = new boolean[10];
		int count = 0;
		for(int i=0; i<arr1.length; i++) {
			arr1[i] = sc.nextInt();
		}

가장 먼저 10개의 변수를 담아줄 arr1 배열을 선언하고, 10개의 변수를 42로 나눴을때의 나머지를 저장할 arr2 배열을 선언한다. 10개의 숫자가 중복이 있는지 없는지를 체크해서 넣을 boolean type의 arr3 배열을 선언해 주고, 중복값이 없는 숫자가 몇개인지 셀 count 변수도 선언해 주었다.
for 문으로 10개의 변수를 arr1 배열에 담아준다.

Step2.

for(int i=0; i<arr2.length; i++) {
			arr2[i] = (arr1[i] % 42);
		}		
		for(int i=0; i<arr2.length; i++) {
			if(i==9) {
				for(int k=0; k<arr2.length-1; k++) {
					if(arr2[i] == arr2[k]) {
						arr3[i] = true;
					}else {
						arr3[i] = false;
					}
				}
			}

arr2 배열에 10개의 정수를 각각 42로 나눈 나머지를 저장해준다.
arr2 배열을 인덱스만 달리해서 서로 비교해야 하기 때문에, i가 9일때 ,
즉, 마지막 인덱스 일때는 10번 인덱스는 없으므로 따로 빼서 계산 했다 arr[i] 에서 i는 9로 고정 되어있고, k의 값만 0~8번 인덱스 까지 돌면서 값이 똑같은 것이 있는지 확인하는 코드이다.
같은 값이 없다면 false를 반환 하도록 하였다.

Step3.

for(int i=0; i<arr2.length; i++) {
			if(i==9) {
				for(int k=0; k<arr2.length-1; k++) {
					if(arr2[i] == arr2[k]) {
						arr3[i] = true;
					}else {
						arr3[i] = false;
					}
				}
			}
			for(int j=(i+1); j<arr2.length; j++) {
				if(arr2[i] == arr2[j]) {
					arr3[i] = true;
					break;
				}else {
					arr3[i] = false;
				}								
			}			
		}

i가 9일 경우 맨위의 for문에서 이미 비교가 이루어 지므로, 밑의 for문은
인덱스 0~8번 까지의 값들을 서로 비교하여, 중복 값이 없는지 찾고 그 여부에 따라 true / false를 배열에 넣어준다.

Step4.

for(int i=0; i<arr3.length; i++) {
			if(arr3[i] == false) {
				count++;
			}
		}
		if(count == 0) {
			count = 1;
		}

모두 42로 나누어 떨어지는 조합일 경우, 모두 true이기 때문에 count 값이 초기 값인 0으로 출력된다. 이럴 경우를 대비해서 count가 0일 경우 a모두 true라는 이야기가 되므로, count 값을 1로 만들어 주었다.

Step5.

System.out.println(count);

누적된 count를 출력해준다.

전체 코드

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] arr1 = new int[10];
		int[] arr2 = new int[10];
		boolean[] arr3 = new boolean[10];
		int count = 0;
		for(int i=0; i<arr1.length; i++) {
			arr1[i] = sc.nextInt();
		}		
		for(int i=0; i<arr2.length; i++) {
			arr2[i] = (arr1[i] % 42);
		}		
		for(int i=0; i<arr2.length; i++) {
			if(i==9) {
				for(int k=0; k<arr2.length-1; k++) {
					if(arr2[i] == arr2[k]) {
						arr3[i] = true;
					}else {
						arr3[i] = false;
					}
				}
			}
			for(int j=(i+1); j<arr2.length; j++) {
				if(arr2[i] == arr2[j]) {
					arr3[i] = true;
					break;
				}else {
					arr3[i] = false;
				}				
			}			
		}		
		for(int i=0; i<arr3.length; i++) {
			if(arr3[i] == false) {
				count++;
			}
		}
		if(count == 0) {
			count = 1;
		}
		System.out.println(count);
	}
}

0개의 댓글