본문 바로가기

알고리즘

[백준] 3052번: 나머지(java, python)

https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net


 🗒 풀이

java

1) set 이용

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Integer[] leftovers = new Integer[10];
        for (int i = 0; i < 10; i++) {
            leftovers[i] = (sc.nextInt() % 42);
        }
        sc.close();

        Set<Integer> result = new HashSet<Integer>(Arrays.asList(leftovers));
        System.out.println(result.size());
    }
}

배열을 만들어 입력받은 수를 42로 나눈 나머지를 저장한 다음, result라는 집합(Set)을 만들어 배열을 리스트로 변환한 후, 다시 집합으로 변환한다.

집합으로 변환하는 이유는 중복을 허용하지 않기 위해서다. (리스트는 중복을 허용하며, 순서가 있는 반면 집합은 중복을 허용하지 않고, 순서가 없다.)

 

 


2) contains() 이용

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> leftovers = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            int leftover = sc.nextInt() % 42;
            if (!leftovers.contains(leftover)) {
                leftovers.add(leftover);
            }
        }
        System.out.println(leftovers.size());
    }
}

이번에는 리스트를 생성한 다음, 리스트의 contains() 함수를 사용하여 leftovers라는 리스트에 입력받은 값을 42로 나눈 나머지인 leftover 변수의 값이 포함되어 있지 않으면 배열에 넣어주는 알고리즘을 사용한다.


python

result = []
for i in range(10):
    result.append(int(input()) % 42)
print(len(set(result)))

result라는 이름의 리스트에 입력되는 값들을 바로 42로 나눠준 나머지를 추가한다.

후, result 배열을 집합(set)으로 변경한 후, 변경한 집합의 길이를 출력한다.

집합으로 변경하는 이유는 중복을 허용하지 않기 위해서다.