알고리즘 공부

[프로그래머스] 오픈채팅방 - java

철매존 2021. 10. 21. 16:21
728x90
반응형

문제 설명

1. 배열에 id, 닉네임, 상태가 주어진다. 상태는 Enter, Leaver, Change이다.

2. Change를 사용하면 그 id를 사용하는 사람의 닉네임이 바뀐다.

3. 사람이 들어오고 나가는 결과를 바뀐 최종 닉네임에 따라 return 하면 된다.

풀이 과정

 1. HashMap과 ArrayList를 통해 간단히 구현할 수 있다.

 2. 해쉬맵에는 그 사람의 id를 키값, 닉네임을 value값으로 한다. 이렇게 하면 id의 value가 바뀔 때 마다 변경 하능하다.

 3. ArrayList에는 그 사람의 id와 출입내역을 저장한다. 그러면 그 id의 사람이 나가거나 들어온 것들을 저장 가능하다.

 4. 그럼 상태에 따라 변경하면 된다.

1) 입장한 경우 - HashMap에 id와 닉네임을 넣어준다. 왜냐면 처음에 들어와야 변경하든 나가든 할 수 있으니까.

   이후 arraylist에 class로 두 값을 (id, 님이 들어왔습니다.) 이렇게 넣어준다.

2) 나간 경우    - HashMap은 변경할 필요가 없다. 새로운 사람이 나간것도 아니고 닉네임이 변경된것도 아니니까.

   ArrayList에 class로 두 값을 (id, 님이 나갔습니다.) 이렇게 넣어준다.

3) 닉네임 변경 - HashMap에 그 아이가 변경되었다는 것을 알려주면 된다.

 

워낙 간단한 문제라 따로 설명할 내용은 없을 듯 하다 

코드

import java.util.*;
class Solution {
public static int toInt(String input){
int intNum;
switch(input){
case "Enter" : intNum = 1; break;
case "Leave" : intNum = 2; break;
case "Change": intNum = 3; break;
default : intNum = 0;
}
return intNum;
}
public String[] solution(String[] record) {
ArrayList<info> inOut = new ArrayList<>();
HashMap<String, String> nickName = new HashMap<>();
String data[][] = new String[record.length][3];
for(int i=0; i<record. length; i++){
for(int j=0; j<3; j++){
data[i] = record[i].split(" ");
}
}
for(int i=0; i<record.length; i++){
int status = toInt(data[i][0]);
if(status==3){
nickName.put(data[i][1], data[i][2]);
}else if(status==1){
nickName.put(data[i][1], data[i][2]);
inOut.add(new info(data[i][1], "님이 들어왔습니다."));
}else{
inOut.add(new info(data[i][1], "님이 나갔습니다."));
}
}
String[] answer = new String[inOut.size()];
for(int i=0; i<inOut.size(); i++){
info info = inOut.get(i);
String nick = nickName.get(info.id);
answer[i] = nick + info.status;
}
return answer;
}
}
class info{
String id;
String status;
info(String id, String status){
this.id = id;
this.status = status;
}
}
view raw gistfile1.txt hosted with ❤ by GitHub
반응형