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

๐Ÿบ ๋งค์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ Kit ํ•ด์‹œ ๋ฌธ์ œํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ kit์— ํ•ด์‹œ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ๋Š” ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜, ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก, ์œ„์žฅ, ๋ฒ ์ŠคํŠธ์•จ๋ฒ” ๋ฌธ์ œํ’€์ด.

 

1. ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

์ž…๋ ฅ๊ฐ’

  • participant: ๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด.
  • completion: ๋งˆ๋ผํ†ค์„ ์™„์ฃผํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด.

์ถœ๋ ฅ๊ฐ’

  • ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋ผ.

์ œํ•œ์‚ฌํ•ญ

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

๋ฌธ์ œํ’€์ด

1. finish๋ผ๋Š” ๋ณ€์ˆ˜๋ช…์˜ ํ•ด์‰ฌ ๋งต์— completion์— ์žˆ๋Š” ๋งˆ๋ผํ†ค์„ ์™„์ฃผํ•œ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ๋™๋ช…์ด์ธ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง‘ํ•ฉ์ด ์•„๋‹Œ ํ•ด์‰ฌ๋งต์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„ ๋ณ„ ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค. 

2. particapant์˜ ๊ธธ์ด๋Š” completion์— ๋น„ํ•ด ๊ธธ์ด๊ฐ€ ํ•œ์ƒ 1๋งŒํผ ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— finish์— ์ €์žฅ๋˜์–ด์žˆ์œผ๋ฉด   

function solution(participant, completion) {
    const finish = new Map()
    for (const x of completion) {
        finish.set(x, (finish.has(x) ? finish.get(x) + 1 : 1))
    }
    return participant.filter(x => {
        if (finish.has(x) && finish.get(x)) {
            finish.set(x, finish.get(x) - 1)
            return false
        }
        return true;
    }).pop()
}

 

 

2. ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

 

def solution(phone_book):
    trie = {}
    for nums in phone_book:
        curr = trie
        for n in nums:
            if n not in curr:
                curr[n] = {}
            curr = curr[n]
            if '.' in curr:
                return False
        else:
            if len(curr):
                return False
            curr['.'] = {}
    return True

 

3. ์œ„์žฅ

function solution(clothes) {
    const cnts = new Map()
    for (const [_, category] of clothes) {
        cnts.set(category, (cnts.has(category) ? cnts.get(category) + 1 : 1))
    }
    return [...cnts.values()].reduce((acc, cur) => acc === 0 ? cur + 1 : (cur + 1) * acc, 0) - 1
}

 

4. ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

 

function solution(genres, plays) {
    const nums = new Map()
    const ids = new Map()
    for (const i in genres) {
        if (nums.has(genres[i])) {
            ids.get(genres[i]).push(i)
            nums.set(genres[i], nums.get(genres[i]) + plays[i])
        } else {
            ids.set(genres[i], [i])
            nums.set(genres[i], plays[i])
        }
    }
    const keys = [...nums.keys()].sort((a, b) => nums.get(a) < nums.get(b) ? 1 : -1)
    const result = []
    for (const key of keys) {
        ids.get(key).sort((a, b) => {
            if (plays[a] === plays[b]) {
                return a < b ? 1 : -1
            }
            return plays[a] > plays[b] ? 1 : -1
        })
        result.push(ids.get(key).pop() * 1)
        if (ids.get(key).length) {
            result.push(ids.get(key).pop() * 1)
        }
    }
    return result
}