๐Ÿงฉ Algorithm/[Programmers] Level 2

[Programmers] L2. ์˜์–ด ๋๋ง์ž‡๊ธฐ (Python)

devCloud 2024. 11. 11. 22:18
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ’€์ด ๋ฐฉ๋ฒ•

๐Ÿ’ก ํƒˆ๋ฝ ์กฐ๊ฑด : ๊ฐ™์€ ๋‹จ์–ด์ธ ๊ฒฝ์šฐ, ๋๋ง์ž‡๊ธฐ๊ฐ€ ์„ฑ๋ฆฝ์ด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ

 

๊ฒŒ์ž„ ์ง„ํ–‰ ์ •๋ณด ์ดˆ๊ธฐํ™”

  • ๋ช‡ ๋ฒˆ์งธ ๊ฒŒ์ž„(๋ผ์šด๋“œ)์ธ์ง€ ์ €์žฅํ•  ๋ณ€์ˆ˜์™€, ํ˜„์žฌ ์ฐจ๋ก€๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ๋‘ ๋ฒˆ์งธ ๋‹จ์–ด๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฏ€๋กœ ๋ชจ๋‘ 1๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ํ˜„์žฌ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž์™€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด, ์ง์ „ ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (set ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.) 
    • ๋งจ ์ฒ˜์Œ ์ธ๋ฑ์Šค์— ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•œ๋‹ค.

๋‹จ์–ด ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ

  • ์ฐจ๋ก€๊ฐ€ ์‚ฌ๋žŒ ์ˆ˜์™€ ๊ฐ™์•„์ง€๋ฉด ๊ฒŒ์ž„ ํšŸ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์ฐจ๋ก€๋ฅผ 1๋กœ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ฉด ์ฐจ๋ก€๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • ๊ฐ ๋‹จ์–ด๋ฅผ ํ™•์ธํ•˜๋ฉฐ, ํ˜„์žฌ ๋‹จ์–ด๊ฐ€ ๋๋ง์ž‡๊ธฐ ๊ทœ์น™์— ๋งž๋Š”์ง€์™€ ์ค‘๋ณต ๋‹จ์–ด์ธ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž์™€ ์ด์ „์— ์ €์žฅํ•œ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋๋ง์ž‡๊ธฐ๊ฐ€ ์„ฑ๋ฆฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ์‚ฌ์šฉํ•œ ๋‹จ์–ด๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ์— ํ˜„์žฌ ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ค‘๋ณต๋œ ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทœ์น™์„ ์œ„๋ฐ˜ํ–ˆ๊ฑฐ๋‚˜ ์ค‘๋ณต ๋‹จ์–ด๊ฐ€ ๋‚˜์˜ค๋ฉด ํƒˆ๋ฝ์ž์˜ ๋ฒˆํ˜ธ์™€ ๋ผ์šด๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ํ˜„์žฌ ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๋ฅผ ์ €์žฅํ•˜๊ณ , ํ˜„์žฌ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉ๋œ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

ํƒˆ๋ฝ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

  • ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ๋ฌธ์ œ์—†์ด ๋๋ง์ž‡๊ธฐ ๊ทœ์น™์— ๋งž๊ฒŒ ๋งํ•œ ๊ฒฝ์šฐ [0, 0]์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

Solution

def solution(n, words):
    game, cnt = 1, 1  # ๊ฒŒ์ž„ ํšŸ์ˆ˜, ์ฐจ๋ก€
    end = words[0][-1]  # ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด ๋ ์ €์žฅ
    used = [words[0]]  # ์‚ฌ์šฉํ•œ ๋‹จ์–ด ์ €์žฅ
    for i in words[1:]:
        if cnt >= n:
            game += 1
            cnt = 1
        else:
            cnt += 1

        if i[0] != end or i in used:  # ๋๋ง์ž‡๊ธฐ ์„ฑ๋ฆฝ ํ™•์ธ/๊ฐ™์€ ๋‹จ์–ด ์ฒดํฌ
            return [cnt, game]
            
        end = i[-1]  # ๋งˆ์ง€๋ง‰ ๊ธ€์ž ์ €์žฅ
        used.append(i)
        
    return [0, 0]

 

 

๊ฐœ์„ ํ•  ์ 

  • ๋‹จ์–ด ์ค‘๋ณต ํ™•์ธ ์‹œ used ๋ฆฌ์ŠคํŠธ์— ๋งค๋ฒˆ in ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์—์„œ์˜ in ์—ฐ์‚ฐ์€ O(n)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฏ€๋กœ, ๋‹จ์–ด๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋‹จ์–ด ์ค‘๋ณต ํ™•์ธ์ด O(1)์˜ ์‹œ๊ฐ„์œผ๋กœ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค. used ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  used ์ง‘ํ•ฉ์„ ํ™œ์šฉํ•˜์—ฌ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐœ์„ ๋œ ์ฝ”๋“œ

def solution(n, words):
   	...
    used = {words[0]}  # ์‚ฌ์šฉํ•œ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•  ์ง‘ํ•ฉ์œผ๋กœ ์ดˆ๊ธฐํ™”

    for i in words[1:]:
        ...
        used.add(i)  # ์ง‘ํ•ฉ์— ๋‹จ์–ด ์ถ”๊ฐ€
        
    return [0, 0]

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์ค‘๋ณต ๋‹จ์–ด๋ฅผ ์ฒดํฌํ•˜๋Š” ์ฝ”๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋งŽ์•˜๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ์—์„œ ์ค‘๋ณต๋œ ๋‹จ์–ด๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ–ˆ๋”๋‹ˆ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์•˜๋‹ค.

if i in words[:words.index(i)]:

 

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด, words.index(i)๋Š” ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋ฆฌ์ŠคํŠธ์—์„œ ์ฒ˜์Œ ๋‚˜ํƒ€๋‚œ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๋ณต ๋‹จ์–ด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ๋œ ๋‹จ์–ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.


 

728x90