본문 바로가기
Algorithm/문제풀이_프로그래머스

[Swift][프로그래머스][해시] 오픈채팅방

by Joahnee 2022. 4. 22.

요구능력

해시(딕셔너리)

 

문제풀이

문제를 읽어보면 중간에 닉네임을 바꾸게 되면 맨 마지막 결과값에서 해당 uid에 대한 닉네임을 바꿔서 출력해줘야한다.

그래서 우선 생각한것이 uid마다 딕셔너리의 키값으로 nickName을 넣어주었다.

그리고 백준에서 주구장창하던 입력받는게 여기서 도움이 됐다.

record를 각각 명령어(Enter, Leave, Change)가 저장되는 command와 아이디가 저장되는 id, 그리고 나가는 경우에는 따로 닉네임이 적혀있지 않으므로 띄어쓰기마다 구분해서 입력받은 str이 3개이상이면 닉네임까지 받는경우라서 str의 count가 3이상이면 dict에 id에 따른 nickName을 저장해주었다.

 

그리고 swtich문을 활용해서 Enter인 경우와 Leave인 경우를 처리해줬는데,

uid라는 2차원 String 프로퍼티에 저장해준 이유는 나중에 id값을 닉네임으로 편하게 바꿔주기 위해서이다.

 

그리고 uid에있는 id를 닉네임으로 변경해주고 result에는 uid 배열 한개씩 joined()해서 저장해줬다.

 

 

후기

무난하게 풀어나간 문제이다.

 

코드

func solution(_ record:[String]) -> [String] {
    var dict = [String:String]()
    var uid = [[String]]()
    var result = [String]()
    for i in record{
        let str = i.split(separator: " ").map{String($0)}
        let command = str[0]
        let id  = str[1]
        if str.count >= 3{
            let nickName = str[2]
            dict[id] = nickName
        }
        switch command{
        case "Enter":
            uid.append([id, "님이 들어왔습니다."])
        case "Leave":
            uid.append([id, "님이 나갔습니다."])
        default:
            break
        }

    }
    for i in 0..<uid.count{
        uid[i][0] = dict[uid[i][0]]!
    }
    for i in 0..<uid.count{
        result.append(uid[i].joined())
    }
    return result
}

댓글