[단계별로 풀어보기] 3052번 나머지 (1차원 배열)

Jun_Gyu·2023년 3월 9일
0

BackJoon Online Judge

목록 보기
8/18


위의 문제는 입력받은 10개의 정수값을 각각 42로 나누었을 때, 서로 다른 나머지가 몇가지가 나오는지 출력을 하는 문제이다.

배열과 반복문(int i)을 이용하여 10개 정수들의 arr[i] % 42 값을 구하는것까지는 풀었으나, 그 이후에 "서로 다른 나머지의 값"을 구분해줄 코드를 작성하는 부분에 대해서 쉽사리 접근하지 못하였다.

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int[] A = new int[10];
		int[] B = new int[10];
		int cnt = 0;

		for (int i = 0; i < 10; i++) {
			A[i] = Integer.parseInt(br.readLine()); // 10개의 정수값 입력
			B[i] = A[i] % 42; // B행렬에 나머지값들 대입
		}
    
        /*---------------------   아래 부분이다.  -------------------------*/	
		for (int i = 0; i < 10; i++) {
			for(int j = 0; j < 10 ; j++) {
				if(B[i] != B[j]) { // 조건 : 서로 다른 값이 몇개 있는지 출력
					cnt++;
				}
			}
		/*---------------------------------------------------------------*/	
		}
		System.out.println(cnt);
	}

처음에는 이중 for문을 구성하여 배열의 각 자리숫자를 서로 비교하여 서로 다른값을 카운트한다는 접근으로 위와같이 코드를 구성하였지만, 코드가 잘못되었다.

그래서 해답을 참고하여 주석처리된 부분의 코드를 아래와 같이 구성해주었다.

        boolean bl;

		for (int i = 0; i < 10; i++) {
			A[i] = Integer.parseInt(br.readLine()) % 42; // 10개의 정수값 입력
		}
		for (int i = 0; i < 10; i++) {
			bl = true; // bl값 초기화.
			for (int j = i + 1; j < A.length; j++) {
				if (A[i] == A[j]) { // 조건 : 서로 다른 값이 몇개 있는지 출력 ex) [0,1,0,0,0,2,3,4,3,2]
					bl = false;  
					break; // 비교하려는 A[i]와 같은수가 배열에 존재할 시 반복문 stop. (+ bl값은 cnt의 카운트용.)
				}
			}
			if (bl == true) {
				cnt++;
			}
		}
		System.out.println(cnt);

bollean형 변수를 선언하여 배열 내에 같은값을 찾을때마다 반복문을 중지하고 카운트가 1씩 올라가도록 코드를 구성해주고,

이중 반복문에서 변수 j의 값을 i+1로 선언하였다.

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글