๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
- ๋ฐฉ์ด ๋น์ด์๊ฑฐ๋ ๋ ๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ฐฉ์ ์ฌ๋์ ๊ณ์ ์ง์ด ๋ฃ๋๋ค.
- ๋ ๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ฐฉ์์ ์๋ ์ฌ๋์ ๋ค ๋ง์ฃผ์น ์ฌ๋๋ค
- answer์ ์ธ๋ฑ์ค๊ฐ ์ฌ๋, ๊ฐ์ด ๋ง์ฃผ์น ์ฌ๋๋ค ์งํฉ์ด๋ค.
- ๋ฐฉ์์ ์๋ ์ฌ๋๋ค์ ๊ฐ ์ธ๋ฑ์ค๋ง๋ค ํฉ์งํฉ ํด์ค๋ค.
- ์งํฉ์ ๊ธธ์ด - 1 ์ด ๋ง์ฃผ์น ์ฌ๋๋ค ( ๋ณธ์ธ ์ ์ธ )
๋ฐฉ์ ์งํฉ์ผ๋ก ํ ์ด์ ๋ iterable ํ ๊ฐ์ฒด ์์ ํฌํจ ๊ด๊ณ๋ฅผ ํ์ธํ ๋
๋ฆฌ์คํธ๋ O(N) ์ด์ง๋ง, ์งํฉ์ O(1) ์ด๋ฏ๋ก
๋ง์ฃผ์น ์ฌ๋๋ค์ ์งํฉ์ผ๋ก ํ ์ด์ ๋ ํฉ์งํฉ์ ํด์ฃผ๋ฉด์ ์ค๋ณต์ ๊ฑฐํ๊ธฐ ์ํด
๐ป์์ค ์ฝ๋
def solution(enter, leave):
N = len(enter)
answer = [set()] * (N + 1)
room = set()
e_idx, l_idx = 0, 0
while l_idx < N: # ๋๊ฐ์ฌ๋ ์์ ๋๊น์ง ๋ฐ๋ณต
if e_idx < N: # ๋ค์ด๊ฐ ์ฌ๋ ์์ ๋
if not room or leave[l_idx] not in room: # ๋น์ด์๊ฑฐ๋ ๋๊ฐ์ฌ๋์ด ์์ผ๋ฉด
room.add(enter[e_idx])
e_idx += 1
if leave[l_idx] in room: # ๋๊ฐ ์ฌ๋์ด ์์ผ๋ฉด ๋๊ฐ
for person in room: # ๋๊ฐ ๋ ๋ง๋ ์ฌ๋๋ค
answer[person] = answer[person].union(room)
room.remove(leave[l_idx])
l_idx += 1
return [len(meet) - 1 for meet in answer[1:]]
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋ฐ์ํ
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ํด๋ฆฌ์ฑ๋ฆฐ์ง 7์ฃผ์ฐจ (0) | 2021.10.02 |
---|---|
[python] ๋ฐฑ์ค - 1018. ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2021.09.22 |
[python] ๋ฐฑ์ค - 2485. ๊ฐ๋ก์ (0) | 2021.09.16 |
[python] ๋ฐฑ์ค - 21608. ์์ด ์ด๋ฑํ๊ต (0) | 2021.09.15 |
[python] ๋ฐฑ์ค - 1347. ๋ฏธ๋ก ๋ง๋ค๊ธฐ (0) | 2021.09.14 |