๐Ÿง‘๐Ÿป‍๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ๋กœ๋˜์˜ ์ตœ๊ณ  ์ˆœ์œ„์™€ ์ตœ์ € ์ˆœ์œ„

EarthSea 2024. 3. 8. 10:00

 

 

๐Ÿ„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด

โœ๐Ÿป Github

๋ฌธ์ œ ํ’€์ด github ๋งํฌ

 

๋ฌธ์ œ ์„ค๋ช…

๋กœ๋˜ 6/45(์ดํ•˜ '๋กœ๋˜'๋กœ ํ‘œ๊ธฐ)๋Š” 1๋ถ€ํ„ฐ 45๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ 6๊ฐœ๋ฅผ ์ฐ์–ด์„œ ๋งžํžˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ณต๊ถŒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋กœ๋˜์˜ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ˆœ์œ„ ๋‹น์ฒจ ๋‚ด์šฉ

1 6๊ฐœ ๋ฒˆํ˜ธ๊ฐ€ ๋ชจ๋‘ ์ผ์น˜
2 5๊ฐœ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜
3 4๊ฐœ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜
4 3๊ฐœ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜
5 2๊ฐœ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜
6(๋‚™์ฒจ) ๊ทธ ์™ธ

๋กœ๋˜๋ฅผ ๊ตฌ๋งคํ•œ ๋ฏผ์šฐ๋Š” ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋ฐœํ‘œ์ผ์„ ํ•™์ˆ˜๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฏผ์šฐ์˜ ๋™์ƒ์ด ๋กœ๋˜์— ๋‚™์„œ๋ฅผ ํ•˜์—ฌ, ์ผ๋ถ€ ๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์ฒจ ๋ฒˆํ˜ธ ๋ฐœํ‘œ ํ›„, ๋ฏผ์šฐ๋Š” ์ž์‹ ์ด ๊ตฌ๋งคํ–ˆ๋˜ ๋กœ๋˜๋กœ ๋‹น์ฒจ์ด ๊ฐ€๋Šฅํ–ˆ๋˜ ์ตœ๊ณ  ์ˆœ์œ„์™€ ์ตœ์ € ์ˆœ์œ„๋ฅผ ์•Œ์•„๋ณด๊ณ  ์‹ถ์–ด ์กŒ์Šต๋‹ˆ๋‹ค.

 

์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” ๋ฒˆํ˜ธ๋ฅผ 0์œผ๋กœ ํ‘œ๊ธฐํ•˜๊ธฐ๋กœ ํ•˜๊ณ , ๋ฏผ์šฐ๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ 6๊ฐœ๊ฐ€ 44, 1, 0, 0, 31 25๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์ฒจ ๋ฒˆํ˜ธ 6๊ฐœ๊ฐ€ 31, 10, 45, 1, 6, 19๋ผ๋ฉด, ๋‹น์ฒจ ๊ฐ€๋Šฅํ•œ ์ตœ๊ณ  ์ˆœ์œ„์™€ ์ตœ์ € ์ˆœ์œ„์˜ ํ•œ ์˜ˆ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹น์ฒจ ๋ฒˆํ˜ธ  31 10 45 1 6 19 ๊ฒฐ๊ณผ
์ตœ๊ณ  ์ˆœ์œ„ ๋ฒˆํ˜ธ 31 0→10 44 1 0→6 25 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜, 3๋“ฑ
์ตœ์ € ์ˆœ์œ„ ๋ฒˆํ˜ธ 31 0→11 44 1 0→7 25 2๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜, 5๋“ฑ
  • ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด, ๊ตฌ๋งคํ•œ ๋กœ๋˜์— ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š” ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ๋งžํžŒ ๊ฑธ๋กœ ์ธ์ •๋ฉ๋‹ˆ๋‹ค.
  • ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” ๋‘ ๊ฐœ์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ๊ฐ 10, 6์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด 3๋“ฑ์— ๋‹น์ฒจ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • 3๋“ฑ์„ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, 2๋“ฑ ์ด์ƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” ๋‘ ๊ฐœ์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ๊ฐ 11, 7์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด 5๋“ฑ์— ๋‹น์ฒจ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • 5๋“ฑ์„ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, 6๋“ฑ(๋‚™์ฒจ)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๋ฏผ์šฐ๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด lottos, ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด win_nums๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, ๋‹น์ฒจ ๊ฐ€๋Šฅํ•œ ์ตœ๊ณ  ์ˆœ์œ„์™€ ์ตœ์ € ์ˆœ์œ„๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„์„œ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

์ œํ•œ์‚ฌํ•ญ

  • lottos๋Š” ๊ธธ์ด 6์ธ ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • lottos์˜ ๋ชจ๋“  ์›์†Œ๋Š” 0 ์ด์ƒ 45 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
    • 0์€ ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” ์ˆซ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • 0์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์ˆซ์ž๋“ค์€ lottos์— 2๊ฐœ ์ด์ƒ ๋‹ด๊ฒจ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • lottos์˜ ์›์†Œ๋“ค์€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • win_nums์€ ๊ธธ์ด 6์ธ ์ •์ˆ˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • win_nums์˜ ๋ชจ๋“  ์›์†Œ๋Š” 1 ์ด์ƒ 45 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
    • win_nums์—๋Š” ๊ฐ™์€ ์ˆซ์ž๊ฐ€ 2๊ฐœ ์ด์ƒ ๋‹ด๊ฒจ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • win_nums์˜ ์›์†Œ๋“ค์€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ž…์ถœ๋ ฅ ์˜ˆ

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

 

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

์•Œ์•„๋ณผ ์ˆ˜ ์—†๋Š” ๋ฒˆํ˜ธ๋“ค์ด ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค๋ฉด, 1๋“ฑ๊ณผ 6๋“ฑ์— ๋‹น์ฒจ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์ฒจ ๋ฒˆํ˜ธ 38 19 20 40 15 25 ๊ฒฐ๊ณผ

์ตœ๊ณ  ์ˆœ์œ„ ๋ฒˆํ˜ธ 0→38 0→19 0→20 0→40 0→15 0→25 6๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜, 1๋“ฑ
์ตœ์ € ์ˆœ์œ„ ๋ฒˆํ˜ธ 0→21 0→22 0→23 0→24 0→26 0→27 0๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜, 6๋“ฑ

์ž…์ถœ๋ ฅ ์˜ˆ #3

๋ฏผ์šฐ๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜์˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๊ฐ€ ๋ชจ๋‘ ์ผ์น˜ํ•˜๋ฏ€๋กœ, ์ตœ๊ณ  ์ˆœ์œ„์™€ ์ตœ์ € ์ˆœ์œ„๋Š” ๋ชจ๋‘ 1๋“ฑ์ž…๋‹ˆ๋‹ค.

 


 

 

๋ฌธ์ œ ํ’€์ด

 

๋‚˜์˜ ํ’€์ด

import Foundation

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    
    // 0์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    let number0 = lottos.filter{ $0 == 0 }.count
    
    // ํ˜„์žฌ ์ˆœ์œ„
    var rank = 7
    
    // ์ผ์น˜ํ•˜๋Š” ๊ฐ’
    for i in win_nums {
        if lottos.contains(i) {
            rank -= 1
        }
    }
    
    let best = rank - number0
    
    return [ best == 7 ? 6 : best , rank == 7 ? 6 : rank ]
}

 

์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ–ˆ๋‹ค.

0์˜ ๊ฐœ์ˆ˜์™€ ๋กœ๋˜๋ฒˆํ˜ธ์™€ ๋‚ด๋ฒˆํ˜ธ ์ค‘ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์œผ๋ฉด ๋˜์—ˆ๋Š”๋ฐ, ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•˜๋ƒ๊ฐ€ ๋ฌธ์ œ์˜€๋˜๊ฑฐ ๊ฐ™๋‹ค.

 

๋‚˜๋Š” ์ƒ๊ฐ์„ ์กฐ๊ธˆ ๋ฐ”๊ฟ” ํ˜„์žฌ ์ˆœ์œ„๋ฅผ ์ •ํ•ด๋‘๊ณ , ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๋นผ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ตœํ•˜์ ์„ ์ •ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ rank ๊ฐ€ 7์ผ ๋•Œ๊ฐ€ ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋‚˜์˜ ๋กœ๋˜ ๋ฒˆํ˜ธ ์ค‘ 0์„ ์ œ์™ธํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋” ํšจ์œจ์ด ๋‚˜์˜ค์ง€ ์•Š์„๊นŒ๋ผ๋Š” ์ƒ๊ฐ์ด ์žˆ์—ˆ๋Š”๋ฐ,

๋ฐ˜๋ณต๋ฌธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํฌ์ง€ ์•Š๊ณ , 0์„ ์ œ์™ธํ•˜๋Š” ๊ณผ์ •์˜ ์‹คํ–‰์‹œ๊ฐ„๋„ ๊ณ ๋ คํ•ด๋ณด์•„์„œ ๋บ๋‹ค.

 

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

import Foundation

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {

    let zeroCount = lottos.filter { $0 == 0}.count
    let winCount: Int = win_nums.filter { lottos.contains($0) }.count

    return [min(7-winCount-zeroCount,6), min(7-winCount,6)]
}

 

์ด ๋ถ„์€ lottos์˜ ๊ฐ’๊ณผ winCount์˜ ๊ฐ’์„ ์ฐพ์„ ๋•Œ ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ณ ๋ฏผํ•˜์˜€๋˜ ์ˆœ์œ„๊ฐ€ 7์ธ ๋ถ€๋ถ„์„ min ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ‘ธ์…จ๋‹ค.

 

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    let mine = Set(lottos)
    let winner = Set(win_nums)
    let score = mine.intersection(winner).count
    let joker = lottos.filter { ($0 == 0) }.count
    let ranking = [6, 6, 5, 4, 3, 2, 1]
    return [ranking[score + joker], ranking[score]]
}

์ด ๋ถ„์€ ์ƒˆ๋กœ์šด ๊ด€์ ์—์„œ ์ ‘๊ทผ์„ ํ•˜์…”์„œ ์‹ ๊ธฐํ–ˆ๋‹ค.

๋‘ ๊ฐ€์ง€์˜ ๋ฐฐ์—ด์„ ์ง‘ํ•ฉ์— ๋„ฃ์–ด ๊ต์ง‘ํ•ฉ์œผ๋กœ ํ‘ธ์…จ๋‹ค.

๋˜ํ•œ ์ˆœ์œ„๊ฐ€ 7์ธ ๋ถ€๋ถ„์„ ์ƒˆ๋กœ์šด ranking ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

์ง‘ํ•ฉ์œผ๋กœ ํ’€์—ˆ์„ ๋•Œ์™€ ์‹คํ–‰์‹œ๊ฐ„์„ ๋น„๊ตํ•ด๋ณด๊ณ  ์‹ถ์–ด์„œ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ด์ง ๋ฐ”๊พธ์–ด ์ฃผ์—ˆ๋‹ค.

 

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    let mine = Set(lottos)
    let winner = Set(win_nums)
    let score = mine.intersection(winner).count
    let joker = lottos.filter { ($0 == 0) }.count
    
    let best = 7 - score - joker
    let worst = 7 - score
    return [ best == 7 ? 6 : best, worst == 7 ? 6 : worst ]
}
// ์ง‘ํ•ฉ์œผ๋กœ ํ‘ผ ์‹คํ–‰์‹œ๊ฐ„
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.07ms, 16.4MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.07ms, 16.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.08ms, 16.3MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.07ms, 16.2MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.07ms, 16.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.09ms, 16.3MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.06ms, 16.5MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.4MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.07ms, 16.4MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.3MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.07ms, 16.2MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.4MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.4MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (0.06ms, 16.3MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	
// ๋ฐ˜๋ณต๋ฌธ๊ณผ contains๋ฅผ ์‚ฌ์šฉํ•ด ํ‘ผ ์‹คํ–‰์‹œ๊ฐ„
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.4MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.4MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.08ms, 16.3MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.4MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.5MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.1MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.3MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.6MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰	ํ†ต๊ณผ (0.06ms, 16.4MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰	ํ†ต๊ณผ (0.05ms, 16MB)
ํ…Œ์ŠคํŠธ 14 ใ€‰	ํ†ต๊ณผ (0.04ms, 16.3MB)
ํ…Œ์ŠคํŠธ 15 ใ€‰	ํ†ต๊ณผ (0.05ms, 16.4MB)

 

์ง‘ํ•ฉ๋ณด๋‹ค ๋ฐ˜๋ณต๋ฌธ๊ณผ contain๊ฐ€ ์กฐ๊ธˆ ๋” ๋น ๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค.