Algorithm Problem/Python

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์œ„ํด๋ฆฌ์ฑŒ๋ฆฐ์ง€ 7์ฃผ์ฐจ

deo2kim 2021. 9. 17. 19:48
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

 

  1. ๋ฐฉ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ๋– ๋‚  ์‚ฌ๋žŒ์ด ์—†์œผ๋ฉด ๋ฐฉ์— ์‚ฌ๋žŒ์„ ๊ณ„์† ์ง‘์–ด ๋„ฃ๋Š”๋‹ค.
  2. ๋– ๋‚  ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ๋ฐฉ์•ˆ์— ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋‹ค ๋งˆ์ฃผ์นœ ์‚ฌ๋žŒ๋“ค
    1. answer์˜ ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ๋žŒ, ๊ฐ’์ด ๋งˆ์ฃผ์นœ ์‚ฌ๋žŒ๋“ค ์ง‘ํ•ฉ์ด๋‹ค.
    2. ๋ฐฉ์•ˆ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ๊ฐ ์ธ๋ฑ์Šค๋งˆ๋‹ค ํ•ฉ์ง‘ํ•ฉ ํ•ด์ค€๋‹ค.
  3. ์ง‘ํ•ฉ์˜ ๊ธธ์ด - 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:]]

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋ฐ˜์‘ํ˜•