Algorithm🐰/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Swift μ˜€ν”ˆμ±„νŒ…λ°© 2019 kakao

Jouureee 2022. 5. 2. 15:48

문제 :

https://programmers.co.kr/learn/courses/30/lessons/42888

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ˜€ν”ˆμ±„νŒ…λ°©

μ˜€ν”ˆμ±„νŒ…λ°© μΉ΄μΉ΄μ˜€ν†‘ μ˜€ν”ˆμ±„νŒ…λ°©μ—μ„œλŠ” μΉœκ΅¬κ°€ μ•„λ‹Œ μ‚¬λžŒλ“€κ³Ό λŒ€ν™”λ₯Ό ν•  수 μžˆλŠ”λ°, 본래 λ‹‰λ„€μž„μ΄ μ•„λ‹Œ κ°€μƒμ˜ λ‹‰λ„€μž„μ„ μ‚¬μš©ν•˜μ—¬ μ±„νŒ…λ°©μ— λ“€μ–΄κ°ˆ 수 μžˆλ‹€. μ‹ μž…μ‚¬μ›μΈ κΉ€ν¬λ£¨λŠ” μΉ΄μΉ΄μ˜€ν†‘ 였

programmers.co.kr

뢄석 :

ν™•μ‹€νžˆ swiftλŠ” c++보닀 λ¬Έμžμ—΄ νŒŒμ‹±μ— μžˆμ–΄μ„œ μœ μš©ν•œκ²ƒ κ°™λ‹€ ! κ·Έλž˜μ„œ μ•„μ΄λ””μ–΄λ§Œ μƒκ°λ‚˜λ©΄ κ΅¬ν˜„ν•˜κΈ° μˆ˜μ›”ν•˜λ‹€λŠ” 생각을 λ‹€μ‹œν•œλ²ˆ ν•˜κ²Œ λ˜μ—ˆλ‹€. swift 짱 ..πŸ‘

이 λ¬Έμ œλŠ” λ¬Έμžμ—΄ νŒŒμ‹± 및 κ΅¬ν˜„ 문제둜, μ˜€ν”ˆ μ±„νŒ…λ°©μ— λ“€μ–΄μ™”μ„λ•Œ, λ‚˜κ°”μ„λ•Œ, 이름을 λ³€κ²½ν–ˆμ„λ•Œμ˜ λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•΄μ£Όλ©΄ λœλ‹€. κΈ°μ‘΄ 톑방 μ°Έμ—¬μžκ°€ 이름을 λ³€κ²½ν•˜κ³  λ‹€μ‹œ λ“€μ–΄μ˜€κ²Œ 되면 ν†‘λ°©μ—λŠ” μ „ 이름 -> ν˜„μž¬ μ΄λ¦„μœΌλ‘œ 같이 변경이 이루어져야 ν•œλ‹€. 

λ”°λΌμ„œ μ²˜μŒμ—” for문을 λŒλ©΄μ„œ enter와 change λͺ…λ Ήμ–΄ μ‹œ, inputDictionary에 μ €μž₯λ˜μ–΄ μžˆλŠ” μœ μ €λΌλ©΄ 좜λ ₯ 배열을 돌며 ν•˜λ‚˜μ”©

replacingOccurrences(of:\(μ˜ˆμ „ 이름), with: \(ν˜„μž¬ 이름))으둜 λŒ€μ²΄ν•˜κ³ μž ν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ 25λΆ€ν„° μ£Όλ₯΄λ₯΅ μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚œλ‹€... 

κ·Έλž˜μ„œ λ‹€λ₯Έ λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•΄ 아이디어λ₯Ό μ–»μ—ˆλ‹€.

for문을 돌기 전에 inputDictionary에 λ§ˆμ§€λ§‰ 이름을 μ΄ˆκΈ°κ°’μœΌλ‘œ κ°€μ§€κ²Œ ν•œ λ’€, λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•΄μ£Όλ©΄ enter, changeμ‹œ 좜λ ₯λ¬Έ λ‚΄ 같은 아이디 가진 μ‚¬λžŒμ„ μ°Ύμ•„ λŒ€μ²΄ν•΄μ£Όμ§€ μ•Šμ•„λ„ λœλ‹€λŠ” 점 ..!

이λ₯Ό ν•΄κ²°ν•˜λ‹ˆ μ‹œκ°„ μ΄ˆκ³Όκ°€ ν•΄κ²° λ˜μ—ˆλ‹€. ν•΄μ‹œ 맡 방식이 for문보닀 빠름을 λŠλ‚„ 수 μžˆμ—ˆλ‹€.

 

Swift μ‹œκ°„μ΄ˆκ³Ό μ½”λ“œ :

//
//  main.swift
//  SOMAπŸ‘©πŸ»‍πŸ’»
//
//  Created by JoSoJeong on 2022/05/02.
//

import Foundation
var inputDic:[String: String] = [:]
var answer = [(String, String)]()

func reName(_ id: String, _ name: String) {
    if inputDic.keys.contains(id) { // idκ°€ μ €μž₯된 μ‚¬λžŒμ΄λΌλ©΄
        for (idx, i) in answer.enumerated() {
            if i.1 == id {
                answer[idx].0 = i.0.replacingOccurrences(of: "\(inputDic[i.1]!)", with: "\(name)")
            }
        }
    }
    inputDic[id] = name
    
}

func solution(_ record:[String]) -> [String]{
    for line in record {
        let l = line.components(separatedBy: " ")
        let command = l[0]
        let id = l[1]

        switch command {
        case "Enter":
            let name = l[2]
            reName(id, name)
            answer.append(("\(name)λ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.", id))
        case "Leave":
            
            answer.append(("\(inputDic[id]!)λ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.", id))
        case "Change":
            let name = l[2]
            reName(id, name)
        default:
            print("")
        }
    }
    return answer.map { $0.0 }
}

 

Swift ν•΄κ²° μ½”λ“œ :

//
//  main.swift
//  SOMAπŸ‘©πŸ»‍πŸ’»
//
//  Created by JoSoJeong on 2022/05/02.
//

import Foundation

func solution(_ record:[String]) -> [String]{
    var inputDic:[String: String] = [:]
    var answer = [String]()
    for line in record {
        let l = line.components(separatedBy: " ")
        if l.count > 2 {
            inputDic[l[1]] = l[2]
        }
    }
    
    for line in record {
        let l = line.components(separatedBy: " ")
        let command = l[0]
        let id = l[1]
        
        switch command {
        case "Enter":
            answer.append("\(inputDic[id]!)λ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.")
        case "Leave":
            answer.append("\(inputDic[id]!)λ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.")
        default:
            print("")
        }
    }
    return answer
}

κ²°κ³Ό :