본문 바로가기
Algorithm

[구현/수학] 백준 3052 나머지 - Python, Java

by jangThang 2022. 1. 27.
반응형

백준 온라인 저지

 

 

[ Contents ]

     

    1. 문제 (링크 참조)

     

    3052번: 나머지

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     10개의 수를 입력받아 42로 나눈 나머지 중 중복값을 제거한 개수를 구하는 문제입니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하여 해결할

    star7sss.tistory.com

     42로 나눈 나머지를 구하는 과정을 쉽습니다. 다만, 중복값을 제거하는 방법이 고민이 됩니다.

     단순하게 비교할 대상이 10개 밖에 되지 않으니, 서로 비교하여 중복값을 찾아낼 수 있습니다. 또 다른 방법은 배열(리스트)을 활용합니다. 나머지는 0~41까지 42개 정도로 범위가 적으니, 배열(리스트) 항목으로 체크할 수 있습니다.

      

     

     

    3. 코드

    remainder = [0]*43
    for i in range(10):
        n = int(input())
        n %= 42
        if remainder[n] == 0:
            remainder[n] += 1
    print(sum(remainder))

     나머지 값에 해당하는 리스트 항목에 표시하고, 중복값일 경우 무시하도록 코드를 작성했습니다. 

     

     

    import java.util.Scanner;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		
    		int[] num = new int[10];
    		for(int i = 0; i < 10; i++) {
    			num[i] = sc.nextInt();
    			num[i] %= 42;
    		}
    		int sum = 10;
    		int same = 0;
    		for(int i = 0; i < 10; i++) {
    			for(int j = i; j < 10; j++) {
    				if(num[i] == num[j]) 
    					same++;
    			}
    			if(same > 1) {
    				sum -= 1;
    			}
    			same = 0;
    		}
    		System.out.println(sum);
    		sc.close();
    	}
    }

     Java 코드에서는 10개의 항목을 서로 비교하여, 중복값을 제거하는 방식을 사용했습니다.

     

     

     

     

    반응형

    댓글