본문 바로가기

문제풀기/백준 문제풀이

[백준 문제 3052번] 나머지 문제

728x90
반응형

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

 

3052번: 나머지

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

www.acmicpc.net

 

문제 3052) 나머지 문제

 

문제)
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.  수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력)
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

출력)
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

 

NO 예제 입력 예제 출력
1 1 2 3 4 5 6 7 8 9 10 10
2 42 84 252 420 840 126 42 84 420 126 1
3 39 40 41 42 43 44 82 83 84 85  

 

 

정답 코드)

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int a[] = new int[10];
		int num = 10;
		
		for(int i=0; i < 10; i++) {
			a[i] = sc.nextInt();
			
			a[i] = a[i] % 42;
		}
		
		for(int i=0; i < 10; i++) {
			for(int j=i+1; j < 10; j++) {
				if(a[i] == a[j]) {
					num--;
					break;
				}
				if(j == 9) {
					i = i+1;
					j = i;
				}
			}
		}
		System.out.println(num);
	}
}
배열을 이용해 총 10개의 방을 지정했습니다. 그리고 그 배열에 입력 값을 넣으면 42의 나머지가 저장되게 만들었습니다. 

변수를 하나 더 지정해 총 10의 값을 지정하고 중복 for문을 이용해서 1~10까지 반복해서 비교할 수 있게끔 만듭니다. 여기서 j는 9일때 i값 증가 및 j 값 초기화로 반복문을 지속해서 수행하게 합니다. 최종적으로는 1번을 10까지 비교하고 2번을 10까지 비교하며 9번도 10까지 비교할 수 있게 만듭니다.

결과는 10개 중 중복을 제외한 결과 값이 출력되게 합니다.

 

다른 풀이를 보면 Arrays.sort(배열)을 이용해서 오름차순으로 정렬하게 만듭니다.

그 후 임시 변수를 지정해 다음 값과 비교합니다.

중복이 없으면 num이 1씩 증가하도록 만들고 결과를 간단하게 출력할 수 있습니다.

 

public static void main(String[] args) {
		
	Scanner sc = new Scanner(System.in);
		
	int a[] = new int[10];
		
	for(int i=0; i < 10; i++) {
		a[i] = sc.nextInt() % 42;
	}
	
	Arrays.sort(a);
		
	int temp = a[0];
	int num = 1;
		
	for(int i=1; i < 10; i++) {
		if(temp != a[i]) {
			num++;
		}
		temp = a[i];
	}
	System.out.println(num);
}

 

많이 풀어보면서 다양한 함수들과 코드를 간단하게 만들 수 있는 방법들을 익혀야겠어요!!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형