Algorithm

[Java] 백준 문제 3052 - 나머지

isaac.kim 2022. 4. 21. 20:20
728x90
반응형

[Java] 백준 문제 3052 - 나머지

백준 단계별 문제에서 배열에 관한 문제이다.

전체 소스코드

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		// 10개의 수를 입력 받는다.: 길이 10
		int ar[] = new int [10];
		// 나머지 값을 저장할 array  : 길이 10
		int remain[] = new int [10];
		int b = 42;
		
		int count = 1; // 서로 다른 수 카운트
		
		// 입력과 동시에 나머지 저장
		for (int i = 0; i < 10; i++ ) {
			ar[i] = sc.nextInt();
			remain[i] = ar[i] % b;
		}
		// 정렬
		Arrays.sort(remain);
		
		for (int j = 0; j < ar.length - 1; j++) 
			if (remain[j] != remain[j+1])  count ++;
		
		System.out.println(count);
		sc.close();
	}
}

 

알고리즘은 직접 풀어보는 것이 좋고, 나중에 다른 사람이 푼 것도 보면 도움이 많이 된다.

 

내가 푼 방식은 다음과 같다.

 

코드 설명

Scanner sc = new Scanner(System.in);
// 10개의 수를 입력 받는다.: 길이 10
int ar[] = new int [10];
// 나머지 값을 저장할 array  : 길이 10
int remain[] = new int [10];
int b = 42;

int count = 1; // 서로 다른 수 카운트

자바에서 키보드 입력을 받을 때 사용하는 클래스는 Scanner, BufferedReader가 있다. BufferedReader가 속도가 더 빠르다고 하지만, 간단한 문제에서는 문제되지 않고 큰 차이가 없기 때문에 코드를 더 간소화해서 볼 수 있는 Scanner 클래스를 사용했다.

 

입력받을 10개의 정수를 저장할 배열 int [] ar = new int [10]; 를 선언하고, 나머지를 저장할 int [] remain = new int [10]; 배열을 선언한다. 나머지를 구할 나눗셈 대상인 B도 세팅하고, 나머지에서 서로 다른 수를 count할 변수 count도 선언한다.

 

 

// 입력과 동시에 나머지 저장
for (int i = 0; i < 10; i++ ) {
    ar[i] = sc.nextInt();
    remain[i] = ar[i] % b;
}

반복문을 사용해 입력받음과 동시에 나머지를 구해 remain에 저장한다.

반복문의 조건문 숫자 10은 ar.length 등으로 대체될 수 있다.

 

// 정렬
Arrays.sort(remain);

다른 수를 비교하여 찾기 위해 나머지 값을 담은 배열을 정렬한다. 정렬을 하여 같은 숫자는 바로 옆에 오도록 하며 갈수록 큰 수를 나타내어 비교를 쉽게 하기 위함이다.

 

5, 10, 2, 13, ... 이와 같이 정렬되지 않은 수의 비교는 쉽지 않은데, 0, 1, 2, 2, 3, ... 과 같이 정렬된 배열은 앞에서 부터 비교를 하면 다른 수를 찾기가 쉽다. 무조건 숫자 하나는 있으므로 count는 1로 세팅해두었다.

 

위 예시로 비교해보자.

첫 번째 숫자 0, 두 번째 숫자 1의 비교 시 다른 숫자 이므로 count를 증가시킨다. (count = 2)

두 번째 숫자 1, 세 번째 숫자 2의 비교 시 다른 숫자 이므로 count를 증가시킨다. (count = 3)

세 번째 숫자 2, 네 번째 숫자 2의 비교 시 같은 숫자 이므로 count를 증가시키지 않는다. (count = 3)

네 번째 숫자 2, 다섯 번째 숫자 3의 비교 시 다른 숫자 이므로 count를 증가시킨다. (count = 4)

 

실제로 다른 숫자는 0, 1, 2, 3 으로 4개이다. count도 4이다.

 

이를 코드로 보면 다음과 같다.

    for (int j = 0; j < ar.length - 1; j++) 
        if (remain[j] != remain[j+1])  count ++;

    System.out.println(count);
    sc.close();

반복문을 통해 다른 숫자인 경우에 count를 증가 시킨다. 그리고 count를 출력하고, Scanner 클래스를 소멸시킨다.

 


지적, 조언은 언제나 환영입니다. 도움이 되셨다면 좋아요 꾹! 저에게 큰 힘이 된답니다!!

728x90
반응형

'Algorithm' 카테고리의 다른 글

[Java] 백문 문제 8958 - OX퀴즈  (0) 2022.04.23
[Java] 백준 문제 1546 평균  (0) 2022.04.23
[Java] 백준 문제 2577 숫자의 개수  (0) 2022.04.21
[Java] 백준 문제 2562 최댓값  (0) 2022.04.20
[Java] 백준 10818 최소, 최대  (0) 2022.04.19