레벨업 일지

[Java] 프로그래머스. 체육복 본문

알고리즘/프로그래머스

[Java] 프로그래머스. 체육복

24시간이모자란 2023. 1. 22. 23:25

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java# 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

필요한 개념

  • set 자료구조

 

풀이

로직은 다음과 같다.

  1. 체육복을 가진 학생 배열을 오름차순 정렬한다.
  2. 체육복 있는 학생 배열을 탐색하면서 , 도난당한 경우를 제외한다.
  3. 체육복 있는 학생 배열을 탐색하면서 , 내 번호의 왼쪽 학생, 오른쪽 학생 순으로 체육복 잃어버린 학생을 체크
  4. 전체 학생 수 - 체육복을 받지 못한 학생 수 리턴.

 

코드

import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        HashSet<Integer> set = new HashSet<Integer>();
        Arrays.sort(reserve);
        
        for(int x: lost)
            set.add(x);
        
        for(int i =0 ;i < reserve.length; i++){
            if(set.contains(reserve[i])){
              set.remove(reserve[i]);
            reserve[i] = -1;
            } 
        }
        
        int ans =reserve.length ;
        for(int i =0 ;i < reserve.length; i++){
            int left = reserve[i] -1;
            int right = reserve[i]+1;
            if(set.contains(left)){
                set.remove(left);
            }else if(set.contains(right)){
                set.remove(right);
            }
        }
        return n - set.size();
    }
}
Comments