백준 알고리즘/1차원 배열

[JAVA 자바] 백준 3052번 : 나머지

Sun720 2022. 5. 26. 00:32

▶ 문제

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

 

3052번: 나머지

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

www.acmicpc.net

예제 입력 더보기

 설명

입력한 수 각각의 42로 나눈 나머지를 모은 배열을 만든 후에

같은 값이 있는지 체크를 해야 하는데 첫번째 입력 값을 제외하고 두번째로 입력받은 값부터

이전 요소와 비교해서 같으면 이전요소를 아예 상관 없는 값으로 집어 넣도록 한다.

 

그렇게 배열에 값을 채워 넣었다면

다시 반복문을 실행시켜서 엉뚱한 값을 집어 넣은 요소들을 카운트 하기만 하면 된다.

엉뚱한 값은 이 문제에서 다룰 일이 없는 -1을 집어 넣었었다.

 

 

문제 풀이

🌱 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int[] arr = new int[10];

		for (int i = 0; i < 10; i++) {
			arr[i] = (Integer.parseInt(br.readLine()))%42;
			if (i == 0) {
				continue;
			}
			for(int j=0; j<i; j++) {
				if(arr[i] == arr[j]) {
					arr[j] = -1;
				}
			}
		}		
		int count = 0;
		for(int i=0; i<10; i++) {
			if(arr[i] != -1) {
				count++;
			}
		}
		System.out.println(count);		
	}
}

 

 

Log

문제를 이해하는 것은 어렵지 않았는데 코드로 구현하기가 쉽지 않았다.

이전 요소와 비교해서 같다는 조건이 만족하면 -1 값을 넣도록 하는 반복문을 만들 때

머릿속으로 그려가면서 해야했기에 조금 까다로웠던 거 같다.

외형상으로는 별찍기와 비슷한 중첩 for 문이지만 여기에서는 배열을 다룰 때 사용한다는 점에서 전혀 다른 내용으로 이루어져 있다는 것이 반전이라면 반전일 것이다.

 

728x90
반응형