[프로그래머스](Java) - 입실 퇴실(위클리 챌린지 7주차)

민지킴·2021년 9월 16일
0

프로그래머스

목록 보기
41/42
post-thumbnail

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/86048

문제 풀이

queue를 이용해서 들어온 사람들을 받으려고 했지만, 나가는 순서가 임의로 정해지므로
list를 사용해서 들어온 순서대로 받았다. 또한 데이터의 삭제도 간편하여 채택.

 List<Integer>list = new ArrayList();

for문을 돌며 list에 enter[]에 있는 값들을 넣어준다.
단, list에 값이 추가될때마다 answer의 값을 변화 시켜준다.
list의 값을 체크하여 방금 들어온 사람은 현재 list.size()-1 만큼의 사람을 마주쳤으며
이미 list에 있는 값들은 새로운 사람을 만난것이므로 +1을 해준다.

            for(int j=0; j<list.size(); j++){
                if(enter[i]==list.get(j)){
                    answer[list.get(j)-1] = list.size()-1;
                }else{
                    answer[list.get(j)-1]++;
                }          
            }

퇴실한 사람의 처리는, 사람이 입장한 후 확인하는데 leave의 인덱스값이 list에 있는지 체크하고 있다면, 제거처리, 없다면 그 인덱스에 머물러 있어야한다.

            while(idx<answer.length && list.contains(leave[idx])){
                list.remove(Integer.valueOf(leave[idx++]));
            }

코드

import java.util.*;

class Solution {
    public int[] solution(int[] enter, int[] leave) {
        int[] answer = new int[enter.length];
        List<Integer>list = new ArrayList();
        int idx=0;
        for(int i=0; i<answer.length;i++){
            list.add(enter[i]);
            for(int j=0; j<list.size(); j++){
                if(enter[i]==list.get(j)){
                    answer[list.get(j)-1] = list.size()-1;
                }else{
                    answer[list.get(j)-1]++;
                }          
            }
            while(idx<answer.length && list.contains(leave[idx])){
                list.remove(Integer.valueOf(leave[idx++]));
            }
        }
        
        return answer;
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글