본문 바로가기
알고리즘/PROGRAMMERS

체육복(Lv.1)

by 현대타운301 2024. 3. 21.

 


 

문제 설명

 

 

 

입출력 예시

 

 

요약

잃어버린 사람의 앞 뒤 번호를 여분이 있는 사람 목록에서 찾기

 


 

풀이

 

접근 방식

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