알고리즘/프로그래머스
[위클리 챌린지] 7주차
래울
2021. 9. 17. 20:43
https://programmers.co.kr/learn/courses/30/lessons/86048
코딩테스트 연습 - 7주차
사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 오늘 회의실에는
programmers.co.kr
- 풀이
1. 현재 입실한 인원이 누구인지를 담는 now_in리스트와
Key가 번호, Value가 각 번호와 만났는지를 체크하는 리스트인 meet딕셔너리를 사용한다.
2. meet딕셔너리를 {번호, [0, 0, 0, ... ,0]} 의 형태로 초기화한다.
3. 만약 enter = [1, 3, 2] 이고, leave = [1, 2, 3] 일 경우... meet딕셔너리는 아래와 같다.
- 초기상태
Key | Value |
1 | [0, 0, 0] |
2 | [0, 0, 0] |
3 | [0, 0, 0] |
- now_in=[1]
Key | Value |
1 | [1, 0, 0] |
2 | [0, 0, 0] |
3 | [0, 0, 0] |
- now_in=[]
Key | Value |
1 | [1, 0, 0] |
2 | [0, 0, 0] |
3 | [0, 0, 0] |
- now_in=[3]
Key | Value |
1 | [1, 0, 0] |
2 | [0, 0, 0] |
3 | [0, 0, 1] |
- now_in=[3, 2]
Key | Value |
1 | [1, 0, 0] |
2 | [0, 1, 1] |
3 | [0, 1, 1] |
4. 누군가 입실할 때, 본인과 현재 입실해 있는 인원들의 리스트를 check한다.
5. 나 자신을 제외하고 check개수를 세서 반환한다.
- 코드
def solution(enter, leave):
answer, now_in = [], []
meet = {}
for i in range(len(enter)):
meet[i+1] = [0 for k in range(len(enter))]
for i in enter:
while leave:
if leave[0] in now_in:
now_in.remove(leave.pop(0))
else:
break
now_in.append(i)
for n in now_in:
meet[n][i-1] = meet[i][n-1] = 1
return [sum(meet[i])-1 for i in meet]