오픈채팅방

유태형·2022년 3월 21일
0

문제


문제 분석

나갔다가 다시 들어오거나, 닉네임을 수정하거나 해서 닉네임이 항상 바뀔수 있고 결과는 바뀐 닉네임만 처음부터 마지막 까지 보여줘야 하는 문제입니다.




풀이

변하지 않는 유저ID가 주어집니다. 유저 ID로 자유롭게 바뀔 수 있는 닉네임해시맵을 이용하여 찾는다면 항상 찾을 수 있을 것 입니다.



순서

  1. 해시맵에 유저ID, 닉네임 등록
  2. 현재의 닉네임으로 모든 기록 출력


해시맵에 유저ID, 닉네임 등록

변하지 않는 유저ID를 해시맵의 키로 자유롭게 바뀔 수 있는 닉네임를 해시맵의 값으로 지정하면 항상 ID -> 닉네임 변환이 가능합니다.

		HashMap<String,String> hash = new HashMap<>(); //유저ID, 닉네임으로 해시맵 구성
        
		for(String s : record){ //한 사건당 닉네임 구분을 위해
            String[] temp = s.split(" ");
            switch(temp[0]){
                case "Enter":
                case "Change": //입장, 변경
                    hash.put(temp[1],temp[2]); //id, 닉네임 저장
                    break;
            }
        }

문자열에서 split(" ")시 단어 단위로 나누어 배열에 저장합니다.
temp[0] : 행동
temp[1] : id
temp[2] : 닉네임

입장과 닉네임 변경시에만 해시맵의 닉네임을 입력,수정합니다.



현재의 닉네임으로 모든 기록 출력

평소와는 다르게 String+연산이 아닌 StringBuilderappend()메서드를 이용해 보았습니다.

		//출력 배열 해시로 id->닉네임
        for(String s: record){
            String[] temp = s.split(" ");
            StringBuilder sb = new StringBuilder();
            String id = temp[1]; //ID
            sb.append(hash.get(id) + "님이 "); //닉네임
            
            switch(temp[0]){
                case "Enter": //입장
                    sb.append("들어왔습니다.");
                    answer.add(sb.toString());
                    break;
                case "Leave": //퇴장
                    sb.append("나갔습니다.");
                    answer.add(sb.toString());
                    break;
            }
        }

닉네임 변경은 출력을 안하므로 입장과 퇴장시에만 결과를 출력합니다.




코드

import java.util.*;

class Solution {
public String[] solution(String[] record) {
HashMap<String,String> hash = new HashMap<>(); //유저ID, 닉네임으로 해시맵 구성
ArrayList answer = new ArrayList<>(); //결과 저장

    for(String s : record){ //한 사건당 닉네임 구분을 위해
        String[] temp = s.split(" ");
        switch(temp[0]){
            case "Enter":
            case "Change": //입장, 변경
                hash.put(temp[1],temp[2]); //id, 닉네임 저장
                break;
        }
    }
   
    //출력 배열 해시로 id->닉네임
    for(String s: record){
        String[] temp = s.split(" ");
        StringBuilder sb = new StringBuilder();
        String id = temp[1]; //ID
        sb.append(hash.get(id) + "님이 "); //닉네임
       
        switch(temp[0]){
            case "Enter": //입장
                sb.append("들어왔습니다.");
                answer.add(sb.toString());
                break;
            case "Leave": //퇴장
                sb.append("나갔습니다.");
                answer.add(sb.toString());
                break;
        }
    }
   
    return answer.toArray(new String[answer.size()]); //결과출력
}

}




GitHub

https://github.com/ds02168/Study_Algorithm/commit/e40e17bf98b7cfa27155072c87182f43e2f4ae71

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보