[프로그래머스] 오픈채팅방 - Java, 자바
난이도
레벨 2
문제
https://programmers.co.kr/learn/courses/30/lessons/42888
풀이
-
출력형태를 보니 유저가 들어왔을 때와 나갔을 때 출력한다.
큐를 이용해서 어떤 아이디가 들어오고 나갔는지 저장한다.
q.add("Enter"(or "Leave"), ID); -
아이디에 해당하는 닉네임을 갱신 시켜줘야한다.
아이디가 들어올 때 map에 put해주고 변경을 요청할 때 replace(put)해준다. -
Queue에서 ID를 빼어 닉네임을 가져오고, Enter인 경우 "님이 들어왔습니다." Leave 인 경우 "님이 나갔습니다."
++ 추가
다른 사람들 풀이도 한번 둘러봤다.
-
기록을 남길 result 리스트 생성
-
record를 반복문 돌리며
Enter 인 경우 map.put(id, nickname); , result.add(id + "님이 들어왔습니다.");
Leave 인 경우 result.add(id+"님이 나갔습니다.);
Change 인 경우 map.put(id, nicknmae);// 닉네임 변경 -
result를 반복문 돌리며
-
'님'자의 인덱스를 뽑아와서 id를 구한다.
int idx = result.get(i).indexOf("님");
String id = result.get(i).substring(0, idx); -
맵으로 id를 nickname으로 가져오고 그 뒤에 "님" 이후 문자열을 붙인다.
map.get(id) + result.get(i).substring(idx);
-
코드
1) 내 풀이
import java.util.*;
public class 오픈채팅방 {
public String[] solution(String[] record) {
Queue<String[]> q = new LinkedList<>();
HashMap<String, String> map = new HashMap<>();
for (int i = 0; i < record.length; i++) {
String[] str = record[i].split(" ");
if (!str[0].equals("Change")) {
q.add(new String[]{str[0], str[1]});
}
if (str[0].equals("Change")) {
map.replace(str[1], str[2]);
// map.put(str[1],str[2]);
}
if (str[0].equals("Enter")) {
map.put(str[1], str[2]);
}
}
String[] answer = new String[q.size()];
int i = 0;
while (!q.isEmpty()) {
String[] str = q.poll();
if (str[0].equals("Enter")) {
answer[i++] = map.get(str[1]) + "님이 들어왔습니다.";
} else {
answer[i++] = map.get(str[1]) + "님이 나갔습니다.";
}
}
return answer;
}
}
2) 다른 풀이
package 레벨2;
import java.util.*;
public class 오픈채팅방 {
public String[] solution(String[] record) {
// 기록을 남길 list
List<String> result = new ArrayList<>();
// <id, nickname>
HashMap<String, String> map = new HashMap<>();
for (int i = 0; i < record.length; i++) {
String[] str = record[i].split(" ");
if (str[0].equals("Enter")) {
map.put(str[1], str[2]);
result.add(str[1] + "님이 들어왔습니다.");
}
if (str[0].equals("Leave")) {
result.add(str[1] + "님이 나갔습니다.");
}
if (str[0].equals("Change")) {
map.put(str[1], str[2]); // 변경
}
}
String[] answer = new String[result.size()];
for (int i = 0; i < result.size(); i++) {
// id만 빼오기 위해 0부터 indexOf("님")까지 substring
int idx = result.get(i).indexOf("님");
String id = result.get(i).substring(0, idx);
answer[i] = map.get(id) + result.get(i).substring(idx);
}
return answer;
}
}
https://taehoung0102.tistory.com/60
Author And Source
이 문제에 관하여([프로그래머스] 오픈채팅방 - Java, 자바), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmjieun/프로그래머스-오픈채팅방-Java-자바저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)