하루에 한 문제

[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 -Java 본문

알고리즘/프로그래머스 lv2 다시풀기

[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 -Java

dkwjdi 2021. 3. 16. 01:03

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

 

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

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

programmers.co.kr

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
class Solution {
	    public String[] solution(String[] record) {
	        List<String> accessUseridList = new ArrayList<>(); //userid
	        List<String> accessList = new ArrayList<>(); // 들어왔습니다, 나갔습니다,
	        HashMap<String, String> nickName =new HashMap<>(); //userid 와 닉네임 매칭
	        
	        for(int i=0; i<record.length; i++) {
	        	String []access=record[i].split(" ");
	        	
	        	if(access[0].equals("Enter")) { //들어왔음
	        		accessUseridList.add(access[1]);
	        		accessList.add("님이 들어왔습니다.");
	        		nickName.put(access[1], access[2]); //userid와 nickname 매칭
	        	}
	        	else if(access[0].equals("Leave")) {
	        		accessUseridList.add(access[1]);
	        		accessList.add("님이 나갔습니다.");
	        	}
	        	else { //Change
	        		nickName.put(access[1], access[2]); //userid와 nickname 매칭
	        	}
	        }
	        int size=accessList.size();
	        String[] answer = new String[size]; 
	        for(int i=0; i<size; i++) {
	        	String result=nickName.get(accessUseridList.get(i))+accessList.get(i);
	        	answer[i]=result;
	        }
	        return answer;
	    }
	}

소요시간 : 18분

 

자료구조는 List2개와 HashMap 1개를 사용했습니다.

 

우선 HashMap은 userid와 닉네임을 매칭해주기 위해 사용했습니다.

accessUseridList 는 입력으로 들어오는 userid를 저장해주기 위해 사용했습니다.

accessList는 현재 들어온 사람이 들어온건지, 나간건지 저장하기위해 사용했습니다.

 

문제에서 주어지는 입력과 출력을 자세히 보면,

 

닉네임이 바뀌는 경우는 2가지입니다.

1.Enter로 들어오면서 닉네임을 바꿔서 들어오기

2.Change로 닉네임을 바꾸기

 

그렇다면 userid + (들어옴 or 나감) 를 저장하고 있다가

HashMap에 저장한 <userid , nickname>을 이용해서 마지막에 매칭만 시켜주면 끝납니다.

 

만약 Enter가 들어왔다면

1. 유저아이디를 accessUseridList에 넣어줍니다.

2. 들어옴 accessList에 넣어줍니다.

3. 닉네임이 바뀔수도 있기 때문에 <userid, nickname>을 HashMap에 put해줍니다.

 

만약 Leave가 들어왔다면

1. 유저아이디를 accessUseridList에 넣어줍니다.

2. 나감을 accessList에 넣어줍니다.

-> 나갈 때는 닉네임을 바꿀 수 없기 때문에 HashMap에 put해주지 않아도 됩니다.

 

만약 Change가 들어왔다면

1. <userid, nickname>을 HashMap에 put해줍니다.

 

위의 항목이 모두 끝났다면

<userid, nickname> 과 accessList를 이용해서

문장을 만들어줍니다!

 

끝~

Comments