코딩테스트/프로그래머스
[프로그래머스] 오픈채팅방
애플쩀
2022. 7. 14. 03:44
- 닉네임이 계속 갱신되고, 아이디랑 짝이되니까 HashMap으로 생성
- 결과를 ArrayList에 담아준다
- record 길이만큼 for문을 반복하여 Enter, Change인 경우에 닉네임이 바뀌니
- substring으로 잘라서 map에 아이디와 닉네임을 넣어준다.
- 다시 for문을 record길이만큼 반복하여
- enter와 leave일때만 메세지를 출력하니, 메세지를 출력해주고 int형 배열로 바꿔서 반환
import java.util.*;
class Solution {
public static String[] solution(String[] record) {
String[] answer = {};
String id="";
String name="";
//아이디와 닉네임
HashMap <String, String> map=new HashMap<>();
//결과
ArrayList<String> result=new ArrayList<>();
for(int i=0; i<record.length; i++){
if(record[i].contains("Enter")){
id=record[i].substring(6,record[i].lastIndexOf(" "));
name=record[i].substring(record[i].lastIndexOf(" ")+1);
map.put(id,name);
}
//Change =>map.getOrDefault(id,name)
else if(record[i].contains("Change")){
id=record[i].substring(7,record[i].lastIndexOf(" "));
name=record[i].substring(record[i].lastIndexOf(" ")+1);
map.put(id,name);
}
//Leave
else if(record[i].contains("Leave")){
id=record[i].substring(6);
}
}//for
for (int i = 0; i < record.length; i++) {
if(record[i].contains("Enter")){
id=record[i].substring(6,record[i].lastIndexOf(" "));
result.add(map.get(id)+"님이 들어왔습니다.");
}
//Leave
else if(record[i].contains("Leave")){
id=record[i].substring(6);
result.add(map.get(id)+"님이 나갔습니다.");
}
}//for
answer=result.toArray(new String[0]);
return answer;
}
}
고칠점
substring이 아닌 split 함수를 이용했다면 더 간단했을듯
고친코드
- split함수로 나눠주고
- map에 id와 닉네임을 넣어준다
- result에는 (닉네임은 바뀌니 ) id 값으로 넣어준다.
- 두번째 for문은 결과가 저장된 result가 아이디+"님이 ~입니다." 이므로
- 이 아이디를 최종 닉네임으로 바꿔준다.
import java.util.*;
class Solution {
public static String[] solution(String[] record) {
//아이디와 닉네임
HashMap <String, String> map=new HashMap<>();
//결과
ArrayList<String> result=new ArrayList<>();
for(int i=0; i<record.length; i++){
String[] sp=record[i].split(" ");
if(sp[0].equals("Enter")){
map.put(sp[1],sp[2]);
result.add(sp[1]+"님이 들어왔습니다.");
}else if(sp[0].equals("Change")){
map.replace(sp[1],sp[2]);
}else if(sp[0].equals("Leave")){
result.add(sp[1]+"님이 나갔습니다.");
}
}//for
String[] answer = new String[result.size()];
for (int i = 0; i < result.size(); i++) {
int idx=result.get(i).indexOf("님");
String id=result.get(i).substring(0,idx);
answer[i]=map.get(id)+result.get(i).substring(idx);
}//for
return answer;
}
}