๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[์ฝ”๋“œํŠธ๋ฆฌ ์ฑŒ๋ฆฐ์ง€] 5์ฃผ์ฐจ - HashMap

by hyebin (Helia) 2023. 10. 4.
๋ฐ˜์‘ํ˜•

 

์ง€๋‚œ๋ฒˆ๊ณผ ๋™์ผํ•˜๊ฒŒ 746์ ....๐Ÿฅฒ

 

https://www.codetree.ai/missions/8/problems/hashmap-basic/description

 

์ฝ”๋“œํŠธ๋ฆฌ | ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •์„

๊ตญ๊ฐ€๋Œ€ํ‘œ๊ฐ€ ๋งŒ๋“  ์ฝ”๋”ฉ ๊ณต๋ถ€์˜ ๊ฐ€์ด๋“œ๋ถ ์ฝ”๋”ฉ ์™•์ดˆ๋ณด๋ถ€ํ„ฐ ๊ฟˆ์˜ ์ง์žฅ ์ฝ”ํ…Œ ํ•ฉ๊ฒฉ๊นŒ์ง€, ๊ตญ๊ฐ€๋Œ€ํ‘œ๊ฐ€ ์—„์„ ํ•œ ์ปค๋ฆฌํ˜๋Ÿผ์œผ๋กœ ์ค€๋น„ํ•ด๋ณด์„ธ์š”.

www.codetree.ai

 

HashMap ๊ธฐ๋ณธ

๋ฌธ์ œ

n๊ฐœ์˜ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. ๋ช…๋ น์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

  • add k v : (k, v) ์Œ์„ hashmap์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. key๊ฐ€ k, value๊ฐ€ v๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๋งŒ์•ฝ ๋™์ผํ•œ k๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด, v๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค.
  • remove k : key๊ฐ€ k์ธ ์Œ์„ ์ฐพ์•„ hashmap์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • find k : key๊ฐ€ k์ธ ์Œ์ด hashmap์— ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์žˆ๋‹ค๋ฉด ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์—†๋‹ค๋ฉด None์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ํ˜•์‹

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” n์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„ ๋ถ€ํ„ฐ๋Š” n๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ๋ช…๋ น์ด ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๊ฐ ๋ช…๋ น์— ์ฃผ์–ด์ง€๋Š” key์™€ value๋Š” ์ „๋ถ€ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ๋ช…๋ น๋“ค์€ ์ˆœ์„œ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • 1 ≤ n ≤ 100,000
  • 1 ≤ ์ฃผ์–ด์ง€๋Š” ์ˆซ์ž ≤ 

์ถœ๋ ฅ ํ˜•์‹

๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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

์˜ˆ์ œ 1

์ž…๋ ฅ:

11
add 3 5
add 10000 1
find 3
find 5
find 10000
add 3 10
find 3
add 7 15
remove 3
remove 7
find 7

์ถœ๋ ฅ:

5
None
1
10
None

์˜ˆ์ œ ์„ค๋ช…

๋ช…๋ น find๊ฐ€ ์ฃผ์–ด์ง€๋Š” ํšŸ์ˆ˜๋Š” 5๋ฒˆ์œผ๋กœ 3, 4, 5, 7, 11 ๋ฒˆ์งธ ์ž…๋‹ˆ๋‹ค.

  • 3 ๋ฒˆ์งธ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, key 3์—๋Š” value 5๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • 4 ๋ฒˆ์งธ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, key 5๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 5 ๋ฒˆ์งธ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, key 10000์—๋Š” value 1์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • 7 ๋ฒˆ์งธ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, key 3์—๋Š” value 10๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • 11 ๋ฒˆ์งธ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, key 7์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œํ•œ

์‹œ๊ฐ„์ œํ•œ: 1000ms
๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 80MB

ํ’€์ด

key-value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๊ฐ ๋ช…๋ น์–ด์— ๋งž๊ฒŒ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฝ”๋“œ

let n = Int(readLine()!)!
var dict = [Int: Int]()

for _ in 0..<n {
    let input = readLine()!.split(separator: " ").map{String($0)}
    
    switch input[0] {
    case "add":
        dict[Int(input[1])!] = Int(input[2])!
    case "remove":
        dict[Int(input[1])!] = nil
    case "find":
        print(dict[Int(input[1])!] == nil ? "None" : dict[Int(input[1])!]!)
    default:
        break
    }
}
๋ฐ˜์‘ํ˜•