Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- pytorch
- 1단계
- 프로그래머스
- 코드수행
- CS231n
- Object detection
- 전산기초
- 자료구조 및 실습
- Python
- SWEA
- 딥러닝
- 머신러닝
- STL
- 3단계
- 2단계
- 파이썬
- docker
- ssd
- C++
- ubuntu
- 그리디
- MySQL
- 이것이 코딩테스트다 with 파이썬
- 실전알고리즘
- test-helper
- 구현
- AWS
- 모두를 위한 딥러닝 강좌 시즌1
- cs
- 백준
Archives
- Today
- Total
곰퓨타의 SW 이야기
[프로그래머스 level2 7주차_입실 퇴실] 규칙 찾기 본문
해결해야하는 문제는 다음과 같았다.
https://programmers.co.kr/learn/courses/30/lessons/86048
코딩테스트 연습 - 7주차_입실 퇴실
사회적 거리두기를 위해 회의실에 출입할 때 명부에 이름을 적어야 합니다. 입실과 퇴실이 동시에 이뤄지는 경우는 없으며, 입실 시각과 퇴실 시각은 따로 기록하지 않습니다. 오늘 회의실에는
programmers.co.kr
어제 2단계를 풀며 애먹었던 경험으로 인해,, 남은 2단계 문제들을 풀어보고 넘어가고자 한다 !! 이 문제 또한 ,, 더럽게 해결한 것 같다..!
아이디어는 다음과 같다.
아이디어를 바탕으로 작성한 코드는 다음과 같다.
def solution(enter, leave):
answer = []
enter_time = {}
leave_time ={}
n=len(enter)
for i in range(n):
enter_time[enter[i]] = i
leave_time[leave[i]] = i
meeting_person = [set() for _ in range(n+1)]
for i in range(1,n+1):
i_enter = enter_time[i]
i_leave = leave_time[i]
for j in range(1,n+1) :
if i != j and j not in meeting_person[i]:
if enter_time[j] < i_enter and leave_time[j] > i_leave :
for k in range(enter_time[j]+1,i_enter + 1):
meeting_person[enter[k]].add(j)
meeting_person[j].add(enter[k])
elif enter_time[j] > i_enter and leave_time[j] < i_leave :
for k in range(i_enter+1,enter_time[j]+1):
meeting_person[i].add(enter[k])
meeting_person[enter[k]].add(i)
for i in range(1,n+1):
answer.append(len(meeting_person[i]))
return answer
너무 더럽게 푼 것 같아서 다른 사람의 풀이를 참고하며 주석을 달며 이해해보았다.
def solution(enter,leave):
answer = [0] * len(enter)
room = []
enter_idx = 0
# 떠나는 멤버 기준으로 시작 !
for l in leave:
# 현재 떠나는 멤버가 도착할 때까지 room에 인원수를 추가해준다.
while l not in room :
room.append(enter[enter_idx])
enter_idx+=1
# 현재 떠나는 멤버를 떠나보낸다.
room.remove(l)
# 떠나는 멤버는 현재 룸에 존재하여 만나는 인원수를 기록한다.
answer[l-1] += len(room)
# room에 있는 인원들은 현재 떠나는 멤버와 있었다는 의미로 1 더해준다.
for person in room :
answer[person-1] += 1
return answer
현재 떠나는 멤버를 기준으로 room이라는 공간을 생성하여 그 공간에 있는 사람들은 만나는 것이므로, 이를 체크해주는 방식이다. 규칙을 찾아 회의실을 만들어 문제를 풀이하였다는 점이 흥미로웠다...
오늘 문제를 너무 더럽게 풀었는데,, 다음에 비슷한 유형의 문제를 마주한다면 좀 더 깔끔하게 해결해보고 싶다 !
'TIL > 프로그래머스' 카테고리의 다른 글
[프로그래머스 level1 숫자 문자열과 영단어] 딕셔너리 활용하기 (0) | 2021.10.03 |
---|---|
[프로그래머스 level2 빛의 경로 사이클] dfs 활용하여 경로찾기 (0) | 2021.10.03 |
[프로그래머스 level2 5주차_모음사전] 수학적 사고를 활용하기 (0) | 2021.09.29 |
[프로그래머스 level3 숫자게임] 그리디 응용하기 (0) | 2021.09.28 |
[프로그래머스 level3 최고의 집합] 수학 응용하기 (0) | 2021.09.27 |
Comments