λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🐺 맀일 μ•Œκ³ λ¦¬μ¦˜

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 숫자 야ꡬ level 2

문제

  • 숫자 야ꡬ κ²Œμž„μ€ 1~9κΉŒμ§€ 3자리 μž„μ˜μ˜ 숫자λ₯Ό μ •ν•œ λ’€ μ„œλ‘œκ°€ μƒκ°ν•œ 숫자λ₯Ό λ§žμΆ”λŠ” κ²Œμž„μ΄λ‹€.
  • μˆ«μžλŠ” λ§žμ§€λ§Œ, μœ„μΉ˜κ°€ 틀렸을 λ•ŒλŠ” λ³Ό
  • μˆ«μžμ™€ μœ„μΉ˜κ°€ λͺ¨λ‘ λ§žμ„ λ•ŒλŠ” 슀트라이크
  • μˆ«μžμ™€ μœ„μΉ˜κ°€ λͺ¨λ‘ 틀렸을 λ•ŒλŠ” 아웃

μž…λ ₯κ°’

  • baseball: μ§ˆλ¬Έν•œ μ„Έμžλ¦¬ 수, 슀트라이크의수, 볼의 수λ₯Ό 담은 2차원 λ°°μ—΄

좜λ ₯κ°’

  • 정닡일 수 μžˆλŠ” 숫자의 수

 

λ¬Έμ œν’€μ΄

1. μ •λ‹΅ 후보가 될 수 μžˆλŠ” κ°€μž₯ μž‘μ€κ°’ 123 λΆ€ν„° κ°€μž₯ 큰 κ°’ 987κΉŒμ§€ μˆœνšŒν•˜λ©° 정닡인지 ν™•μΈν•œλ‹€.

2. 100처럼 0이 ν¬ν•¨λ˜μ–΄μžˆκ±°λ‚˜ 112 와 같이 같은 μˆ˜κ°€ μ€‘λ³΅λœ κ²½μš°λŠ” 닡이 될 수 μ—†λŠ” μˆ«μžμ΄λ―€λ‘œ μ œμ™Έν•œλ‹€.

3. 정닡후보와 μ§ˆλ¬Έν•œ μ„Έμžλ¦¬ 수λ₯Ό 비ꡐ해봀을떄 μŠ€νŠΈλΌμ΄ν¬λ‚˜ 볼의 κ°―μˆ˜κ°€ λ”± λ§žμ•„ 떨어지지 μ•ŠλŠ” 경우 정닡이 μ•„λ‹ˆλ―€λ‘œ μ œμ™Έν•œλ‹€.

function solution(baseball) {
    const convert = n => {
        const n3 = n % 10
        const n2 = ((n - n3) / 10) % 10
        const n1 = (n - n3 - n2 * 10) / 100
        return [n1, n2, n3]
    }
    const isValid = y => {
        const [y1, y2, y3] = convert(y)
        if (!y1 || !y2 || !y3 || y1 === y2 || y1 === y3 || y2 === y3) {
            return false
        }
        for (let [x, s, b] of baseball) {
            const [x1, x2, x3] = convert(x)
            if  (y1 === x1) s--
            if  (y2 === x2) s--
            if  (y3 === x3) s--
            if  (y1 === x2 || y1 === x3) b--
            if  (y2 === x1 || y2 === x3) b--
            if  (y3 === x1 || y3 === x2) b--
            if (s !== 0 || b !== 0) {
                return false
            }
        }
        return true
    }
    let answer = 0
    for (let y = 123; y <= 987; y++) {
        if (isValid(y)) {
            answer++
        }
    }
    return answer;
}

μ‹œκ°„λ³΅μž‘λ„: O(N)

κ³΅κ°„λ³΅μž‘λ„: O(1)