[Programmers] 오픈채팅방

2020. 12. 31. 02:23·Algorithm/Algorithm (문제풀이)

1. 문제

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

⭐ 카카오 2019 블라인드 공개채용 기출문제

2. 실수

loop을 2번 중첩했다가 시간초과로 75점을 맞았다.

 

loop 2중첩 시나리오는 다음과 같았다.

아이디 - 닉네임이 매핑되어야 한다는 사실로부터

(1)  중복을 제거한 아이디 목록 Set (집합)

(2) Set element 수 == 회원수 만큼 loop 

(3) (2) loop 안에서 record 로그 수만큼 또 loop

 

(2) + (3) => Time Complexity O(N^2) => 시간 초과

// 중복제거한 아이디 목록
val userIdSet = record.map{it.split(" ")[1]}.toSet()


// 아이디 '갯수' == 유저수 만큼 loop을 돌며 마지막 로그를 검사하는 loop
// Time Complexity O(N^2).. fucking
userIdSet.forEach{
	for(index in record.indices.reversed()){
    // do something
    }
}

 

3. 시나리오

(1) 회원 아이디와 닉네임을 key-value로 같는 Map 자료구조를 사용한다.

(2) 💡 채팅 로그는 '역순으로' 검사한다.  (최종 닉네임은 마지막에 반영) // O(N)

(3) 행위 (Enter, Leave, Change) 중 Enter, Change 로 끝나는 시점의 닉네임이 최종 반영 닉네임

   Leave는 이전 행위 (Enter, Change) 를 만날 때 까지 추가 검사

(4) 채팅 로그 배열 ArrayList // O(N)

   * Change는 로그를 남기지 않음 

(5) Return ArrayList to Array

 

선형 시간복잡도 O(N)를 가지고 풀이에 성공!

 

4. 풀이 (Kotlin)

 

 

 

저작자표시 (새창열림)

'Algorithm > Algorithm (문제풀이)' 카테고리의 다른 글

[Programmers] 124 나라의 숫자  (0) 2021.01.04
[Programmers] 위장  (0) 2021.01.02
[Programmers] 완주하지 못한 선수  (0) 2020.10.31
[Programmers] 전화번호 목록  (0) 2020.10.30
[Programmers] 네트워크  (1) 2020.10.25
'Algorithm/Algorithm (문제풀이)' 카테고리의 다른 글
  • [Programmers] 124 나라의 숫자
  • [Programmers] 위장
  • [Programmers] 완주하지 못한 선수
  • [Programmers] 전화번호 목록
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    C++
    docker
    algorithm
    알고리즘
    kafka
    Programmers
    JPA
    백준
    android
    ubuntu
    프로그래머스
    Git
    database
    Kotlin
    Bitcoin
    java
    Spring
    PostgreSQL
    linux
    javascript
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
[Programmers] 오픈채팅방
상단으로

티스토리툴바