문제 설명
입출력 예시
요약
잃어버린 사람의 앞 뒤 번호를 여분이 있는 사람 목록에서 찾기
풀이
접근 방식
1. lost 배열과 reserve 배열 기반으로 set 만들기
→ reserve에 있는 번호가 lost에도 있으면 해당 번호는 삭제(여분을 잃어버렸기 때문에 +-0)
2. iterator 반복자를 통해 lost set의 앞 뒤 번호 확인
→ 만약 있다면 lost 배열에서 제거
코드리뷰
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
HashSet<Integer> lostSet = new HashSet<>();
HashSet<Integer> reserveSet = new HashSet<>();
for(int i : lost) {
lostSet.add(i); // lostSet 만들기
}
for(int i : reserve) {
if(lostSet.contains(i)) {
lostSet.remove(i); // reserve에도 있도 lost에도 있으면 lostSet에서 해당 번호 삭제
} else {
reserveSet.add(i); // reserveSet 만들기
}
}
Iterator<Integer> it = reserveSet.iterator(); // iterator 반복자 생성
while(it.hasNext()) {
int num = it.next();
if(lostSet.contains(num-1)) { // lost에 있는 번호보다 하나 작은 번호가 reserve에 있나 확인
lostSet.remove(num-1); // 있다면 해당 번호는 lost에서 제거(빌릴 수 있음을 의미)
} else if(lostSet.contains(num+1)) { // 이번엔 하나 큰 번호 확인
lostSet.remove(num+1); // 있으면 제거
}
}
int answer = n - lostSet.size(); // 전체 학생수 - 잃어버린 학생 수
return answer;
}
}
'알고리즘 > PROGRAMMERS' 카테고리의 다른 글
실패율(Lv.1) (0) | 2024.03.22 |
---|---|
다트 게임(Lv.1) (0) | 2024.03.22 |
완주하지 못한 선수(Lv.1) (0) | 2024.03.21 |
소수 찾기(Lv.2) (0) | 2024.03.21 |
크레인 인형뽑기 게임(Lv.1) (0) | 2024.03.21 |