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

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ] ์ฒด์œก๋ณต

EarthSea 2024. 3. 12. 22:51

 

 

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

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

โœ๐Ÿป Github

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

 

 

 

 

๋ฌธ์ œ ์„ค๋ช…

์ ์‹ฌ์‹œ๊ฐ„์— ๋„๋‘‘์ด ๋“ค์–ด, ์ผ๋ถ€ ํ•™์ƒ์ด ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ์—ฌ๋ฒŒ ์ฒด์œก๋ณต์ด ์žˆ๋Š” ํ•™์ƒ์ด ์ด๋“ค์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ฃผ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๋Š” ์ฒด๊ฒฉ ์ˆœ์œผ๋กœ ๋งค๊ฒจ์ ธ ์žˆ์–ด, ๋ฐ”๋กœ ์•ž๋ฒˆํ˜ธ์˜ ํ•™์ƒ์ด๋‚˜ ๋ฐ”๋กœ ๋’ท๋ฒˆํ˜ธ์˜ ํ•™์ƒ์—๊ฒŒ๋งŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 4๋ฒˆ ํ•™์ƒ์€ 3๋ฒˆ ํ•™์ƒ์ด๋‚˜ 5๋ฒˆ ํ•™์ƒ์—๊ฒŒ๋งŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒด์œก๋ณต์ด ์—†์œผ๋ฉด ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฒด์œก๋ณต์„ ์ ์ ˆํžˆ ๋นŒ๋ ค ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํ•™์ƒ์ด ์ฒด์œก์ˆ˜์—…์„ ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด ํ•™์ƒ์˜ ์ˆ˜ n, ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด lost, ์—ฌ๋ฒŒ์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด reserve๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ฒด์œก์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ํ•™์ƒ์˜ ์ตœ๋Œ“๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.

 

 

์ œํ•œ์‚ฌํ•ญ

  • ์ „์ฒด ํ•™์ƒ์˜ ์ˆ˜๋Š” 2๋ช… ์ด์ƒ 30๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ n๋ช… ์ดํ•˜์ด๊ณ  ์ค‘๋ณต๋˜๋Š” ๋ฒˆํ˜ธ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋ฒŒ์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ n๋ช… ์ดํ•˜์ด๊ณ  ์ค‘๋ณต๋˜๋Š” ๋ฒˆํ˜ธ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋ฒŒ ์ฒด์œก๋ณต์ด ์žˆ๋Š” ํ•™์ƒ๋งŒ ๋‹ค๋ฅธ ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋ฒŒ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ์ด ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ด ํ•™์ƒ์€ ์ฒด์œก๋ณต์„ ํ•˜๋‚˜๋งŒ ๋„๋‚œ๋‹นํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉฐ, ๋‚จ์€ ์ฒด์œก๋ณต์ด ํ•˜๋‚˜์ด๊ธฐ์— ๋‹ค๋ฅธ ํ•™์ƒ์—๊ฒŒ๋Š” ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

์ž…์ถœ๋ ฅ ์˜ˆ

n lost reserve return
5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

 

 

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

์˜ˆ์ œ #1

1๋ฒˆ ํ•™์ƒ์ด 2๋ฒˆ ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ฃผ๊ณ , 3๋ฒˆ ํ•™์ƒ์ด๋‚˜ 5๋ฒˆ ํ•™์ƒ์ด 4๋ฒˆ ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ฃผ๋ฉด ํ•™์ƒ 5๋ช…์ด ์ฒด์œก์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

3๋ฒˆ ํ•™์ƒ์ด 2๋ฒˆ ํ•™์ƒ์ด๋‚˜ 4๋ฒˆ ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ฃผ๋ฉด ํ•™์ƒ 4๋ช…์ด ์ฒด์œก์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

 

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

import Foundation

func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    
    var reserve = reserve.sorted()
    var lost = lost.sorted()
    
    // ์ฒด์œก๋ณต์ด ์—†๋Š” ํ•™์ƒ๋“ค ์นด์šดํŠธ
    var count = lost.count
    
    // lost์™€ reserve์˜ ์ค‘๋ณต๊ฐ’ ์ฐพ๊ธฐ
    for (i, num) in lost.enumerated() {
        if reserve.contains(num) {
            count -= 1
            lost[i] = -1
            reserve[reserve.firstIndex(of: num)!] = -1
            continue
        }
    }
    
    for num in lost {
        if num == -1 {
            continue
        }
        if reserve.contains(num-1) {
            count -= 1
            reserve[reserve.firstIndex(of: num-1)!] = -1
            continue
        }
        if reserve.contains(num+1) {
            count -= 1
            reserve[reserve.firstIndex(of: num+1)!] = -1
            continue
        }
    }
    
    return n - count
}

 

swift๋กœ๋Š” ์ฒ˜์Œ์œผ๋กœ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๋””๋ž€?

ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•

 

ํ’€์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์ž.

์ฒ˜์Œ์— ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์€ ‘์ „์ฒด ์นœ๊ตฌ๋“ค์˜ ์ˆ˜์—์„œ ์ฒด์œก๋ณต์„ ์ž…์ง€ ๋ชปํ•˜๋Š” ์นœ๊ตฌ๋“ค์˜ ์ˆ˜๋ฅผ ๋นผ์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.’์˜€๋‹ค.

์ฒด์œก๋ณต์„ ์ž…์ง€ ๋ชปํ•˜๋Š” ์นœ๊ตฌ๋“ค์˜ ์ˆซ์ž๋ฅผ ํ—ค์•„๋ฆฌ๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋ณด๋‹ค๊ฐ€.

reserve๋ฅผ for๋ฌธ์œผ๋กœ ๋„๋Š” ๊ฒƒ์ด ์•„๋‹Œ,

lost๋ฅผ for๋ฌธ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ, ์ด ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ์™„๋ฒฝํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์œผ๋‚˜

 

 

ใ…‹.. 8์‹œ 8๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ์˜ค๋‹ต ํ–‰๋ ฌ ๋ณด์ด์‹œ๋‚˜์š”..?

 

์ œ๊ฐ€ ๋†“์ณค๋˜ ๋ถ€๋ถ„์€ ๋”ฑ ๋‘ ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ, “ ์—ฌ๋ฒŒ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ์ด ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ด ํ•™์ƒ์€ ์ฒด์œก๋ณต์„ ํ•˜๋‚˜๋งŒ ๋„๋‚œ๋‹นํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉฐ, ๋‚จ์€ ์ฒด์œก๋ณต์ด ํ•˜๋‚˜์ด๊ธฐ์— ๋‹ค๋ฅธ ํ•™์ƒ์—๊ฒŒ๋Š” ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. “

๋‘ ๋ฒˆ์งธ, reserve์™€ lost๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค..!

 

์—ฌ๋ฒŒ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ์ด ๋„๋‚œ๋‹นํ–ˆ๋‹ค๋Š” ๊ฑด์€ lost์™€ reserve ๋ฐฐ์—ด์— ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค์˜€์–ด์š”

์ด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ €๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ธ์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋ฅธ ๋ถ„๋“ค ์ค‘์— ์ด๋ ‡๊ฒŒ ๋˜‘๋˜‘ํ•˜๊ฒŒ filterํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ‘ธ์‹ ๋ถ„์ด ์žˆ๋”๋ผ๊ณ ์š”!

let newReserve = reserve.filter { !lost.contains($0) }
let newLost = lost.filter { !reserve.contains($0) }

๊ทผ๋ฐ, ์ด๋Ÿฌ๋ฉด lost๋ž‘ reserve ๋‘ ๋ฒˆ๋Œ๋ฆฌ๋Š” ๊ฑฐ๋ผ ์‹œ๊ฐ„์€ ๋น„์Šทํ•  ๋“ฏํ•˜๋„ค์š”!

 

์ •๋ ฌ์ด ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ์–ด์ œ ์ •๋ฆฌํ•œ sort์™€ sorted ๊ฐœ๋…์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ ฌ์‹œ์ผœ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.