ezhoon

[백준] 3052_나머지_Java 본문

[Java] 백준 문제풀이/1차원 배열

[백준] 3052_나머지_Java

ezhoon 2022. 1. 7. 20:55

백준 3052

 

3052번: 나머지

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

www.acmicpc.net

⚠️주의사항

  • 입력 받은 숫자를 42로 나눈 나머지값으로 배열 등록
  • 서로 다른 값이 몇 개 있는지 체크 ( 중복 주의 )

 


문제풀이


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

public class Arrange_3052 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] arr = new int[10];
        boolean check;

        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(br.readLine()) % 42;
        }
        int cnt = 0;

        for (int i = 0; i < arr.length; i++) {
            check = false;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    check = true;
                    break;
                }
            }
            if (check == false){
                cnt++;
            }
        }

        System.out.println(cnt);
    }
}

나름 정석적인 풀이라고 생각합니다. 10개의 숫자를 %42 해서 배열로 입력 받은 후

for문을 이용해서 arr[i] 랑 arr[i+1] 이 같은게 있는지 구분 후 같으면 check = true로 바꾸고 break해서 for문을 빠져나가서 다시 for문을 반복하고 만약 같은게 없으면 check = false 그대로라서 cnt 값이 증가가 됩니다.

 

그리고 이 문제는 풀이를 한 개 더 작성해보겠습니다.


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

public class Arrange_3052 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<Integer> hashSet = new HashSet<Integer>();

        for (int i = 0; i < 10; i++) {
            hashSet.add(Integer.parseInt(br.readLine()) % 42); // add(값) 값이 중복된게 없으면 추가해주고 내부에 값이 존재하지 않는다면 false 반환
        }
        System.out.print(hashSet.size()); // 나머지 값들을 알고 싶은게 아닌 나머지 값의 수량을 알고 싶은거라서 size()로 출력
    }
}

HashSet이란?

 

[Java] 자바 HashSet 사용법 & 예제 총정리

HashSet이란? HashSet은 Set 인터페이스의 구현 클래스입니다. 그렇기에 Set의 성질을 그대로 상속받습니다. Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있습니다. 또한 저장 순

coding-factory.tistory.com

 

다른 사람들의 풀이를 보다가 발견한 방법인데 위 블로그에서 사용법 및 예제를 보고 제가 다시 풀어본 코드입니다.

 

제가 처음 작성한 코드에서 코드의 길이를 엄청나게 줄일 수 있었습니다.

그렇지만 코드 시간이 줄어들지는 않습니다.

하지만 누가 봐도 두 번째 코드가 HashSet에 대해서 이해하고 있다면 알기 쉽기 때문에 HashSet을 쓴게 좋은 코드라고 생각합니다. 

'[Java] 백준 문제풀이 > 1차원 배열' 카테고리의 다른 글

[백준] 8958_OX퀴즈_Java  (0) 2022.01.08
[백준] 1546_평균_Java  (0) 2022.01.08
[백준] 2577_숫자의 개수_Java  (0) 2022.01.07
[백준] 2562_최댓값_Java  (0) 2022.01.07
[백준] 10818_최소, 최대_Java  (0) 2022.01.07
Comments