Dazzling 개발 노트
[프로그래머스] 오픈채팅방 (Java) 본문
[프로그래머스] 오픈채팅방 (Java)
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42888
풀이/후기
생각보다 쉽고 간단하게 해결할 수 있는 문제였는데,
비효율적으로 풀다가 테스트케이스 하나가 안넘어가서 삽질을 엄청했다 ㅎ
로그를 id로 미리 기록한 후 닉네임은 최종 값을 기준으로 id를 덮어씌우도록 풀었다.
map을 잘 활용해서 푼 것 같아 좋았다!
코드
import java.util.*;
class Solution {
public ArrayList<String> solution(String[] record) {
HashMap<String, String> map = new HashMap<>();
ArrayList<String> answer = new ArrayList<>(); // id : 닉네임
for (String r : record){
StringTokenizer str = new StringTokenizer(r, " ");
String func = str.nextToken();
String user = str.nextToken();
if (func.equals("Enter")){
// log에 id로 기록
answer.add(user+"님이 들어왔습니다.");
// id에 대한 닉네임 저장
String nickname = str.nextToken();
map.put(user, nickname);
} else if ( func.equals("Leave") ){
// log에 id로 기록
answer.add(user+"님이 나갔습니다.");
} else if ( func.equals("Change") ){
// id에 대한 수정된 닉네임 저장
String nickname = str.nextToken();
map.put(user, nickname);
}
}
// id를 닉네임으로 바꿔주기
for (int i=0; i < answer.size(); i++){
String[] log = answer.get(i).split("님이 ");
String id = log[0];
String action = log[1];
answer.set(i, map.get(id) + "님이 "+ action);
}
return answer;
}
}
Commit
참고