알고리즘/프로그래머스

프로그래머스 위클리 챌린지 7주차 (자바)

reumiii 2021. 9. 30. 17:40

🍀 문제

사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다.

오늘 회의실에는 총 n명이 입실 후 퇴실했습니다. 편의상 사람들은 1부터 n까지 번호가 하나씩 붙어있으며, 두 번 이상 회의실에 들어온 사람은 없습니다. 이때, 각 사람별로 반드시 만난 사람은 몇 명인지 구하려 합니다.

 

회의실에 입실한 순서가 담긴 정수 배열 enter, 퇴실한 순서가 담긴 정수 배열 leave가 매개변수로 주어질 때, 각 사람별로 반드시 만난 사람은 몇 명인지 번호 순서대로 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

입출력 예

enter leave result
[1,3,2] [1,2,3] [0,1,1]
[1,4,2,3] [2,1,3,4] [2,2,1,3]

 

 

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

 

코딩테스트 연습 - 7주차

사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 오늘 회의실에는

programmers.co.kr

 

 

😊 나의 코드

import java.util.*;

class Solution {
    public int[] solution(int[] enter, int[] leave) {
        int[] answer = new int[enter.length];
        int index = 0;
        HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i=0;i<enter.length; i++) {//입실한 순서대로
            for(Integer j : map.keySet()) {
            	//1. 새로운 사람이 방에 들어감으로 방에 있는 사람의 value 값 1 더해줌
                map.put(j,map.get(j)+1);
            }

			//2. 입실한 사람 map에 저장(value는 방에 남아있는 사람수)
            map.put(enter[i], map.size()); 

            while(index<enter.length && map.containsKey(leave[index])) {
                int leaveNum = leave[index]; //퇴실자 넘버
                answer[leaveNum-1] = map.get(leaveNum);//만난 사람수 answer에 저장
                map.remove(leaveNum);//3. 퇴실자는 방에서 퇴실(map에서 삭제)
                index++;
            }
        }

        return answer;
    }
}

 

HashMap map에 회의실에 들어간 사람들의 정보를 저장한다.

(key : 입실자 넘버 / value : 만난 사람수)

회의실에 입실하면 map에 저장 / 퇴실하면 map에서 삭제한다.

 

1. 새로운 사람이 방에 들어가면 방 안(map)에 남아있는 사람들의 만난 사람수를 1씩 증가 (value 값을 1씩 증가) 시킨다.

 for(Integer j : map.keySet()) {
       map.put(j,map.get(j)+1);
  }

 

2. 방에 입실할 때 map에 저장한다. (key : 입실자 넘버 / value : 방에 남아 있는 사람수 = map.size())

map.put(enter[i], map.size());

 

3. 방에 퇴실할 때 map에서 삭제한다.

map.remove(leaveNum);

 

퇴실할때 (map에서 remove하기 전) answer 배열에 만난 사람수를 저장해서 마지막에 answer 배열을 리턴하였다.