상세 컨텐츠

본문 제목

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

Algorithm

by 쑤야. 2024. 1. 10. 13:18

본문

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근


  • 아이디에 대해서 최신 닉네임 값을 저장해야 한다 → 딕셔너리

 

로직


  • key를 아이디로, value에 닉네임을 저장할 수 있는 딕셔너리를 선언한다
  • 닉네임 매핑을 최신값으로 해야 하므로, 입/퇴장 기록을 아이디와 함께 저장한 후 닉네임 점검이 모두 마무리된 이후 매핑 과정을 거쳐 결과값을 변환한다
  • record에 대해 반복문을 수행한다
    • Enter나 Leave인 경우, 튜플 타입 (입장여부, 아이디)으로 데이터를 추가한다
      (→ 파이썬의 경우, 튜플이 아닌 배열을 사용하는 것이 더 편리하다)
    • Enter와 Change 케이스인 경우, 현재 닉네임과 동일 여부를 신경쓰지 않고, 갱신한다
  • 입/퇴장 데이터에 대해 map 연산자를 통해 닉네임을 매핑하여 결과값으로 반환한다

 

코드


1. Swift 풀이


func solution(_ record:[String]) -> [String] {
    
    var user = [String:String]() //id : nickname
    var log = [(id: String, isEnter: Bool)]()
    
    for r in record {
        
        let split = r.split(separator: " ").map{ String($0) }
        
        switch split[0] {
            
            case "Enter":
            user[split[1]] = split[2]
            log.append((split[1], true))
            
            case "Leave":
            log.append((split[1], false))
            
            case "Change":
            user[split[1]] = split[2]
            
            default: break
        }
    }
    
    return log.map{
        let explain = $0.isEnter ? "님이 들어왔습니다." : "님이 나갔습니다."
        return user[$0.id]! + explain
    }
}

 

 

2. Python 풀이


def solution(record):
    
    user = {}
    log = []
    
    for r in record:
        split = r.split(" ")
        if split[0] == "Enter":
            user[split[1]] = split[2]
            log.append([0, split[1]])
        elif split[0] == "Leave":
            log.append([1, split[1]])
        else:
            user[split[1]] = split[2]
    
    def mapNickname(data):
        explain = "들어왔습니다." if data[0] == 0 else "나갔습니다."
        return user[data[1]] + "님이 " + explain

    return list(map(mapNickname, log))

'Algorithm' 카테고리의 다른 글

[프로그래머스] 숫자 게임  (0) 2024.01.17
[프로그래머스] 택배상자  (1) 2024.01.16
[프로그래머스] 롤케이크 자르기  (0) 2024.01.09
[프로그래머스] 스킬트리  (1) 2024.01.08
[프로그래머스] 땅따먹기  (1) 2024.01.04

관련글 더보기