๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/Programmers

[Programmers] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

 

 

 

๋ฌธ์ œ 

 

์ˆ˜๋งŽ์€ ๋งˆ๋ผํ†ค ์„ ์ˆ˜๋“ค์ด ๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•œ ๋ช…์˜ ์„ ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ์„ ์ˆ˜๊ฐ€ ๋งˆ๋ผํ†ค์„ ์™„์ฃผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด participant์™€ ์™„์ฃผํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด completion์ด ์ฃผ์–ด์งˆ ๋•Œ, ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

 

์ œํ•œ ์‚ฌํ•ญ

 

  • ๋งˆ๋ผํ†ค ๊ฒฝ๊ธฐ์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ 100,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • completion์˜ ๊ธธ์ด๋Š” participant์˜ ๊ธธ์ด๋ณด๋‹ค 1 ์ž‘์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์€ 1๊ฐœ ์ด์ƒ 20๊ฐœ ์ดํ•˜์˜ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์ž ์ค‘์—๋Š” ๋™๋ช…์ด์ธ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

for loop๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ 
def solution(participant, completion):
    # completion ๊ณผ participant ๋ฐฐ์—ด์„ sorting ํ•œ๋‹ค. 
    completion.sort()
    participant.sort()
    # len(completion) ๋งŒํผ ๋Œ๋ฉด์„œ ๊ฐ™์€ index์— ๋‹ค๋ฅธ ๋‹จ์–ด๊ฐ€ ๋†“์—ฌ์žˆ์œผ๋ฉด ๊ทธ๋•Œ์˜ participant๊ฐ’์ด ๋‹ต์ด๋‹ค.  
    for i in range(len(completion)):
        if completion[i] != participant[i]:
            return participant[i]
    # ๋งŒ์•ฝ len(completion) ๊ธธ์ด๋งŒํผ ๋Œ์•˜๋Š”๋ฐ๋„ ๋‹ต์ด ์—†์œผ๋ฉด participant์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ๋‹ต์ด๋‹ค. 
    return participant[-1]
๋ถ„์„ > ์ด ์ฝ”๋“œ๋Š” ๋‘ ๋ฐฐ์—ด์„ sort ํ–ˆ์„ ๋•Œ ๊ฐ™์€ index์— ๋‹ค๋ฅธ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์˜ participant ๊ฐ’์ด ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์ด๊ณ , ๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด๋ฆฌ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ์•„๋„ completion ๋งˆ์ง€๋ง‰ ์›์†Œ์˜ index๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“  ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด participant์— ๋‚จ์€ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ๋‹ต์ด ๋œ๋‹ค๋Š” ์›๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ์ด๋‹ค. 

 

 

 

hash ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ 
def solution(participant, completion):
    # participant ๋ฆฌ์ŠคํŠธ์˜ ํ•ด์‹œ๋ฅผ ๊ตฌํ•˜๊ณ  hash ๊ฐ’์„ ๋”ํ•œ๋‹ค. 
    hash_map = {}
    sumHash = 0
    for part in participant:
        hash_map[hash(part)] = part
        sumHash += hash(part)
        
    # completion ๋ฆฌ์ŠคํŠธ์˜ ํ•ด์‹œ๋ฅผ ๋นผ์ค€๋‹ค. 
    for comp in completion:
        sumHash -= hash(comp)
        
    # ๋‚จ์€ ๊ฐ’์ด ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ hash ๊ฐ’์ด ๋œ๋‹ค. 
    return hash_map[sumHash]
๋ถ„์„ > ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์ „๊นŒ์ง€ ๋‚˜๋Š” ๋‹น์—ฐํžˆ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์„ key ๊ฐ’์œผ๋กœ ๋ณด๋‚ด๊ณ  value๊ฐ’์—๋Š” ๋‚ด๊ฐ€ ์ž„์˜๋กœ ์ง€์ •ํ•œ 1๊ฐ’์„ ๋„ฃ์—ˆ๋Š”๋ฐ, ์ด ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๊ฐ ์„ ์ˆ˜์˜ ์ด๋ฆ„์€ value ๊ฐ’์œผ๋กœ ๋ณด๋‚ด๋ฉด participant์˜ ํ•ด์‹œ ๋ฒˆํ˜ธ์˜ ์ดํ•ฉ์—์„œ completion์˜ ํ•ด์‹œ ๋ฒˆํ˜ธ์˜ ์ดํ•ฉ์„ ๋บ€ ํ•ด์‹œ๊ฐ’์ด ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ํ•ด์‹œ๊ฐ’์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. 

 

 

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

์ˆ˜๋งŽ์€ ๋งˆ๋ผํ†ค ์„ ์ˆ˜๋“ค์ด ๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•œ ๋ช…์˜ ์„ ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ์„ ์ˆ˜๊ฐ€ ๋งˆ๋ผํ†ค์„ ์™„์ฃผํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด participant์™€ ์™„์ฃผํ•œ ์„ ์ˆ˜

programmers.co.kr