프로그래머스 - 오픈채팅방(Lv. 2)

OQ·2022년 3월 1일
0

프로그래머스

목록 보기
2/33

문제 링크

풀이

import Foundation

func solution(_ record:[String]) -> [String] {
    var orders: [String] = [] // 출입 명령어를 보관할 배열
    var dic: [String: String] = [:] // 마지막 닉네임 명단

    // 출입 명령어랑 닉네임 변경 명령어를 따로 보관한다.
    for val in record {
        let varArr = val.components(separatedBy: " ")
        if varArr[0] == "Change" {
            dic[varArr[1]] = varArr[2]
        } else {
            if varArr[0] == "Enter" {
                dic[varArr[1]] = varArr[2]
            }

            orders.append(val)
        }
    }

    let result = getResult(orders, list: dic)
    return result
}

// orders - 출입 명령어를 보관하는 배열
// list - 마지막 닉네임 변경 명단
func getResult(_ orders: [String], list: [String: String]) -> [String] {
    var output: [String] = []
    for (index, val) in orders.enumerated() {
        let varArr = val.components(separatedBy: " ")
        var interpretedVal = ""
        guard let changedNick = list[varArr[1]] else {
            continue	// 닉네임 명단에 없을리가 없기에 여기 탈일 없다.
        }
        
		interpretedVal += changedNick
        if varArr[0] == "Enter" {
            interpretedVal += "님이 들어왔습니다."
        } else {
            interpretedVal += "님이 나갔습니다."
        }

        output.append(interpretedVal)
    }

    return output
}

후기

알고리즘 지식은 크게 필요없는 문제였다.
문자열 파싱하고 분리 그리고 딕셔너리만 잘 사용하면 무난한 문제
고차함수 이용하면 더 코드 짧게 만들 수 있을 듯

profile
덕업일치 iOS 개발자

0개의 댓글