알고리즘/프로그래머스
[프로그래머스] [카카오] [자바] 오픈채팅방
글을 쓰는 개발자
2021. 12. 7. 10:13
반응형
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
문제 접근 방법
해당 문제는 전형적인 해쉬 문제 입니다.
들어온 정보에 대해서 미리 해쉬로 저장하고 나서 값을 뿌려줄 때 해당 값을 뿌려주면 됩니다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public String[] solution(String[] record) {
Participants participants = new Participants(record);
return participants.hashingUsers().returnAnswer();
}
public static class Participants {
private final String[] records;
private final String[] information;
private int size;
private final Map<String,String> users;
private static final String IN = "님이 들어왔습니다.";
private static final String OUT = "님이 나갔습니다.";
public Participants(String[] records) {
this.records = records;
users = new HashMap<>();
information = new String[this.records.length];
}
public Participants hashingUsers() {
int i =0;
for(String sentence : records){
String[] parts = sentence.split(" ");
if (parts[0].equals("Enter") || parts[0].equals("Leave")){
information[i++] = parts[0]+" "+parts[1];
}
if (parts[0].equals("Enter") || parts[0].equals("Change")){
users.put(parts[1],parts[2]);
}
}
size = i;
return this;
}
public String[] returnAnswer() {
String[] res = new String[size];
int i = 0;
for(int cur =0; cur<size; cur++) {
String[] parts = information[cur].split(" ");
if(parts[0].equals("Enter")) {
res[i] = users.get(parts[1])+IN;
}else{
res[i] = users.get(parts[1])+OUT;
}
i++;
}
return res;
}
}
}
hashingUsers
Enter와 Leave에 대해서는 information 배열에 저장하고, Enter와 Change에 대해서는 user의 아이디 값과 이름에 대해서 추가 또는 업데이트를 진행한다.
resultAnswer
Enter와 Leave에 대한 값 기준으로 아이디 대신 이름으로 Enter와 Leave는 각 맞는 한국어로 바꿔주는 역할을 한다.
반응형