250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • 백준
  • 개발자
  • certificate
  • ios
  • JAVA8
  • BFS
  • Python
  • data
  • swift
  • AI
  • SpringMVC
  • 구현
  • 브루트포스
  • 자바
  • java
  • 카카오
  • ADsP
  • Front-end
  • 머신러닝
  • 프로그래머스
  • BOJ
  • uArm
  • JPA
  • 코딩테스트
  • DP
  • 파이썬
  • 문제풀이
  • 알고리즘
  • 선형대수
  • 개발

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

[카카오] 오픈채팅방 (java)
CodingTest/Programmers

[카카오] 오픈채팅방 (java)

2022. 1. 15. 10:51
728x90
728x90

문제링크

 

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

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

programmers.co.kr

문제풀이

👨🏻‍💻 핵심 스킬 👨🏻‍💻
 Map, 구현

카카오 오픈채팅방의 입장과 퇴장의 로그를 리턴해주는 문제이다. 닉네임을 변경하는 경우에는 과거의 입장 및 퇴장의 닉네임도 변경해주어야 한다. 닉네임을 변경하는 방법은 다시 입장시 혹은 방 안에서 변경이 가능하다.

 

닉네임은 Map을 활용하여 id와 닉네임을 매핑시켜주었다. 모든 record를 확인하여 출력해주어야할 log는 가변배열인 ArrayList를 사용해서 넣어주었고, 닉네임이 변경될 수 있는 경우인 새로 입장하는 경우나 Change를 보내는 경우에는 Map을 계속 수정해주어 닉네임 수정을 계속 확인하여 문제를 해결하였다.

구현코드

package pgm_42888;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Solution {
    public String[] solution(String[] records) {

        ArrayList<String[]> logs = new ArrayList<>();
        Map<String, String> nameMap = new HashMap<>();
        for(String record : records){
            String[] log = new String[2];
            String[] splitRecord = record.split(" ");
            if(!splitRecord[0].equals("Change")) {
                log[0] = splitRecord[0];
                log[1] = splitRecord[1];
                logs.add(log);
            }
            if(!splitRecord[0].equals("Leave")) {
                nameMap.put(splitRecord[1], splitRecord[2]);
            }
        }

        String[] answer = new String[logs.size()];
        for(int i = 0; i < logs.size(); i++){
            String[] log = logs.get(i);
            if(log[0].equals("Enter")){
                answer[i] = nameMap.get(log[1]) + "님이 들어왔습니다.";
            }
            else{
                answer[i] = nameMap.get(log[1]) + "님이 나갔습니다.";
            }
        }
        return answer;
    }
}

 

시간복잡도

입력으로 주어지는 Record를 모두 확인하며 진행되기 떄문에  O(Record의 수)이다.

잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)

 

728x90
728x90
저작자표시 비영리 (새창열림)

'CodingTest > Programmers' 카테고리의 다른 글

[카카오] k진수에서 소수 개수 구하기 (java)  (0) 2022.01.22
[카카오] 주차 요금 계산 (java)  (0) 2022.01.20
[카카오] 단체사진찍기 (java)  (0) 2022.01.16
[카카오] 신고 결과 받기 (java)  (0) 2022.01.15
[카카오] 카카오 프렌즈 컬러링북 (java)  (0) 2022.01.02
    'CodingTest/Programmers' 카테고리의 다른 글
    • [카카오] 주차 요금 계산 (java)
    • [카카오] 단체사진찍기 (java)
    • [카카오] 신고 결과 받기 (java)
    • [카카오] 카카오 프렌즈 컬러링북 (java)
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바