itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 킨디
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • 연결리스트
  • nosql
  • binding
  • 독립서점
  • ios
  • 생활코딩
  • SWIFT
  • 어플
  • POSTECH
  • mongodb
  • AppleDevloperAcademy
  • CoreData
  • 세그멘테이션
  • 점주
  • crud
  • 개발자
  • SwiftUI
  • CS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

[프로그래머스 - Swift] 오픈 채팅방 (2019 KAKAO BLIND RECRUITMENT)
PS

[프로그래머스 - Swift] 오픈 채팅방 (2019 KAKAO BLIND RECRUITMENT)

2023. 2. 15. 14:08

문제

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

 

프로그래머스

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

programmers.co.kr

 

풀이

우선 [유저id : 닉네임] 딕셔너리를 만들었다. record에서 Change가 나오면 result의 닉네임을 다시 바꿔줘야 하므로, 처음부터 변경된 닉네임으로 result를 만드는 게 효율적이기 때문이다. 그래서 최종본(?) 닉네임을 얻기 위해 딕셔너리를 구했다. record에서 Enter, Change가 나오면 유저 id의 닉네임을 할당하는 방식으로 진행했다.

 

그후 record에서 Enter, Leave에 대한 메세지를 record에 추가해주었는데, if문 대신 딕셔너리 타입을 이용하였다. 맨 처음엔 if문으로 분기 처리를 해주었는데, 딕셔너리 타입을 활용하니 훨씬 깔끔하고 효율적인 분기 처리가 되었다.

 

카카오 문제라 이 꽉 물고 들어갔는데, 생각보다 쉬운 문제였다.

 

코드

func solution(_ record:[String]) -> [String] {
    let nicknameTable = getNicknameTable(from: record)
    let messageTable = ["Enter":"님이 들어왔습니다.", "Leave":"님이 나갔습니다."]
    var result = [String]()
    
    for arr in record {
        let data = arr.components(separatedBy: " ")
        let status = data[0], id = data[1]

        if status != "Change" {
            result.append(nicknameTable[id]! + messageTable[status]!)
        }
    }
    
    return result
}

func getNicknameTable(from record: [String]) -> [String:String] {
    var board = [String:String]()
    
    for arr in record {
        let data = arr.components(separatedBy: " ")
        let status = data[0], id = data[1]
        
        if status == "Enter" || status == "Change" {
            board[id] = data[2]
        }
    }
    
    return board
}

 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[PS] 간단한 Graph 개념과 BFS, DFS 템플릿  (0) 2023.02.20
[Leetcode - Swift] 1091 Shortest Path in Binary Matrix  (0) 2023.02.18
[Leetcode - Swift] 111. Minimum Depth of Binary Tree  (0) 2023.02.01
[Leetcode - Swift] 94. Binary Tree Inorder Traversal  (0) 2023.02.01
[백준 - Swift] 19583 사이버 개강총회  (0) 2023.01.24
    'PS' 카테고리의 다른 글
    • [PS] 간단한 Graph 개념과 BFS, DFS 템플릿
    • [Leetcode - Swift] 1091 Shortest Path in Binary Matrix
    • [Leetcode - Swift] 111. Minimum Depth of Binary Tree
    • [Leetcode - Swift] 94. Binary Tree Inorder Traversal
    itisjustK
    itisjustK

    티스토리툴바