알고리즘
[알고리즘/Goorm] LV2. 카드 모으기 (Java)
자기개발자 유자
2024. 7. 18. 16:01
728x90
반응형
오늘의 학습 키워드
- 해시셋(HashSet)
오늘의 회고
1. 문제
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
반응형