본문 바로가기

알고리즘

[알고리즘/Goorm] LV2. 카드 모으기 (Java)

728x90
반응형

 

오늘의 학습 키워드

  • 해시셋(HashSet)

오늘의 회고

1. 문제

문제 URL

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

2. 해결 방안

import java.io.*;
import java.util.*;

/**
 * [구름] LV2. 카드 수집 (해쉬)
 */
public class CardCollection {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] nm = br.readLine().split(" ");
        int n = Integer.parseInt(nm[0]); // 모을 N종
        int m = Integer.parseInt(nm[1]); // 제공 카드 수
        List<Integer> cardList = new ArrayList<>();
        for(int i=0; i<m; i++) {
            cardList.add(Integer.parseInt(br.readLine()));
        }
        int cnt = 0; // 카드 최소 장수
        Set<Integer> hs = new HashSet<>(); // hashSet에 카드 넣으면서 수집 완료 조건 충족하는지 판별
        for(int i=0; i<cardList.size(); i++) {
            hs.add(cardList.get(i));
            cnt++;
            if(hs.size() == n) {
                System.out.println(cnt);
                return;
            }
        }

        System.out.println(-1); // for문에서 걸리지 못한 경우 = 카드 모두 모으지 못한 경우 -1
        return;
    }
}
  • 카드 n종(1~n)을 모두 모으면 개수를 리턴해야 한다. hashSet에 주어진 카드를 하나씩 넣으면서 중복되는 숫자의 카드는 1개만 들어가도록 한다. 포문을 돌릴때마다 +1 카운팅을 하고 n과 hashSet의 개수가 같아지면 리턴한다.
  • for문이 모두 돌아간 경우는 n종을 모으지 못한 경우이므로 -1을 리턴한다.

3. 피드백

  • hashSet은 중복되어 들어가지 않는 특징을 알고있어서 이용하여 풀 수 있던 문제였다.
728x90
반응형