๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Coding Test

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜ with python (feat. hash)

by ํ‹ด๋”” 2020. 10. 13.
๋ฐ˜์‘ํ˜•

ํ•ด์‹œ ํ…Œ์ด๋ธ”

Key & Values

- ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ value์™€ key๋ฅผ ๊ฐ€์ง

- ๋”•์…”๋„ˆ๋ฆฌ์™€ ๋‹ค๋ฅธ ์ ์€ key๊ฐ€ ๊ณ„์‚ฐ๋œ ์ˆซ์ž ์‹œํ€€์Šค ํ˜น์€ char

- ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ์—ฐ์†์ ์ด์ง€ ์•Š์€ buckets๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ตฌ์กฐ์— ์ €์žฅ

- ๊ฐ ๊ฐ’์˜ ์œ„์น˜๋Š” ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ๊ณ„์‚ฐ

 

ํ•ด์‹œ ์ถฉ๋Œ(collisions)

๋‹ค๋ฅธ ๊ฐ’์„ input ํ–ˆ์ง€๋งŒ ๊ฐ™์€ hash๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ(๋‹ค๋ฅธ ๊ฐ’์ด๋ผ๋„ ๊ฐ™์€ ํ•ด์‹œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์ด๋ผ ํ•ด์„œ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋Š” ์•„๋‹˜ -> ๋‹จ๋ฐฉํ–ฅ)

 

ํ•ด์‹œ์˜ ์žฅ์ 

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠนํžˆ ๊ทธ ํฌ๊ธฐ๊ฐ€ ์–ด๋–ป๋“  ๊ฐ„์— ๊ฐ’์„ ์ฐพ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ์—์„œ ๊ฐ’์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ 

๋”•์…”๋„ˆ๋ฆฌ๋Š” ํ‚ค์— ๊ฐ’์ด ๋“ค์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ get()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ key์— ๊ฐ’์ด ์—†์„ ๋•Œ false๋ฅผ ๋ฐ˜ํ™˜ํ•จ.

์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ

๊ทธ๋Ÿฌ๋‚˜ ์ค‘๋ณต๋œ ์ด๋ฆ„์„ ๊ฐ€์ง€๋Š” ์‚ฌ๋žŒ์ด ์žˆ์–ด ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.

 

์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ

import collections

collections.Counter(์ดํ„ฐ๋ ˆ์ดํ„ฐํ˜• ๊ฐ์ฒด) -> ์„œ๋กœ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ

 

hash() -> ํ•ด์‹œ ๊ฐ’ ๋ฐ˜ํ™˜

 

์ œ์ถœ์šฉ ์ฝ”๋“œ

def solution(participant, completion):
    
    a = dict()
    
    for i in completion :
        if a.get(i):
            a[i] += 1
        else:
            a[i] = 1
    for i in participant :
        if not a.get(i) :
            return i
        else: 
            a[i] -= 1
            
            if a.get(i) < 0:
                return i

์ถ”๊ฐ€ : Swift 

ํ•ด์‰ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ •๋ ฌ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ๊ฒฝ์šฐ ๋น„๊ต ํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ค‘๋ณต๋˜๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์„ ์ˆ˜๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๊ตฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 

๋‹ค๋งŒ sort ๋•Œ๋ฌธ์— ์ž…๋ ฅ ๊ฐ’์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

class Solution {
    func programmersProblem(_ participant: [String], _ completion: [String] -> String) {
        var par = participant
        var com = completion

        par.sort()
        com.sort()
        
        for i in 0..<com.count {
            if par[i] != com[i] {
                return par[i]
            }
        }
        
        return par[par.count-1]
        
    }
}
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€