[백준/JAVA] 1차원 배열 - 3052번 나머지

신승현·2022년 8월 8일
0

더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!


📝 문제


3052번 나머지


🤷‍♂️ 접근 방법


이번 문제는 중복되지 않은 숫자를 세는 것이 핵심이었습니다. 저는 이번 문제를 보자마자 중복 저장을 하지 않는 HashSet 을 사용하면 코드가 간결해지겠다는 생각이 들었습니다. 하지만 아직은 배열 문제임으로 배열로 문제를 풀어보고 HashSet을 이용한 풀이 방식을 추가하도록 하겠습니다.

먼저 코드를 간결하게 하기 위해 숫자를 입력 받음과 동시에 % 연산자를 사용하여 42로 나눈 나머지를 arr 배열에 저장하였습니다.

    for(int i = 0; i< 10; i++){
        arr[i] = sc.nextInt() % 42;
    }

다음으로는 배열 정렬을 통해 문자열이 오름차순으로 정렬될 수 있게 Arrays.sort() 메소드를 사용하였습니다. (지난 시간에 배운 내용을 활용하시면 됩니다!!) Arrays.sort()를 사용하기 위해서는 import java.util.Arrays 를 import 해주어야 합니다.

    Arrays.sort(arr);

마지막으로 앞의 값과 뒤의 값을 비교하며 두 값이 같지 않으면 cnt를 증가시켰습니다.
(모든 배열의 값이 같을 경우 1을 리턴해야 함으로 cnt의 초기값으로 1을 지정하였습니다.)

    for(int i = 0; i< arr.length -1; i++){
        if(arr[i] != arr[i+1] ) cnt++;
    }

✍ 풀이


방법1

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int arr[] = new int[10];
        int cnt = 1;

        for(int i = 0; i< 10; i++){
            arr[i] = sc.nextInt() % 42;
        }

        Arrays.sort(arr);

        for(int i = 0; i< arr.length -1; i++){
            if(arr[i] != arr[i+1] ) cnt++;
        }

        System.out.println(cnt);

    }
}

방법2

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int arr[] = new int[10];
        int cnt = 1;

        for(int i = 0; i< 10; i++){
            arr[i] = sc.nextInt() % 42;
        }

        for ( int i = 0; i < 10; i++ ) {
            int temp = 0;
            for ( int k = i+1; k < 10; k++ ) {
                if ( arr[i] == arr[k] ) {
                    temp ++;
                }
            }
            if ( temp == 0 ) {
                cnt ++;
            }
        }
        

        System.out.println(cnt);

    }
}


방법3

import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc  = new Scanner(System.in);
        HashSet<Integer> hashSet = new HashSet<Integer>();

        for(int i = 0; i< 10; i++){
            hashSet.add(sc.nextInt() % 42);
        }

        System.out.println(hashSet.size());

    }
}


Reference


profile
I have not failed. I've just found 10,000 ways that won't work. - Thomas A. Edison

0개의 댓글