하루에 한 문제
[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 -Java 본문
[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 -Java
dkwjdi 2021. 3. 16. 01:03https://programmers.co.kr/learn/courses/30/lessons/42888
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
class Solution {
public String[] solution(String[] record) {
List<String> accessUseridList = new ArrayList<>(); //userid
List<String> accessList = new ArrayList<>(); // 들어왔습니다, 나갔습니다,
HashMap<String, String> nickName =new HashMap<>(); //userid 와 닉네임 매칭
for(int i=0; i<record.length; i++) {
String []access=record[i].split(" ");
if(access[0].equals("Enter")) { //들어왔음
accessUseridList.add(access[1]);
accessList.add("님이 들어왔습니다.");
nickName.put(access[1], access[2]); //userid와 nickname 매칭
}
else if(access[0].equals("Leave")) {
accessUseridList.add(access[1]);
accessList.add("님이 나갔습니다.");
}
else { //Change
nickName.put(access[1], access[2]); //userid와 nickname 매칭
}
}
int size=accessList.size();
String[] answer = new String[size];
for(int i=0; i<size; i++) {
String result=nickName.get(accessUseridList.get(i))+accessList.get(i);
answer[i]=result;
}
return answer;
}
}
소요시간 : 18분
자료구조는 List2개와 HashMap 1개를 사용했습니다.
우선 HashMap은 userid와 닉네임을 매칭해주기 위해 사용했습니다.
accessUseridList 는 입력으로 들어오는 userid를 저장해주기 위해 사용했습니다.
accessList는 현재 들어온 사람이 들어온건지, 나간건지 저장하기위해 사용했습니다.
문제에서 주어지는 입력과 출력을 자세히 보면,
닉네임이 바뀌는 경우는 2가지입니다.
1.Enter로 들어오면서 닉네임을 바꿔서 들어오기
2.Change로 닉네임을 바꾸기
그렇다면 userid + (들어옴 or 나감) 를 저장하고 있다가
HashMap에 저장한 <userid , nickname>을 이용해서 마지막에 매칭만 시켜주면 끝납니다.
만약 Enter가 들어왔다면
1. 유저아이디를 accessUseridList에 넣어줍니다.
2. 들어옴 accessList에 넣어줍니다.
3. 닉네임이 바뀔수도 있기 때문에 <userid, nickname>을 HashMap에 put해줍니다.
만약 Leave가 들어왔다면
1. 유저아이디를 accessUseridList에 넣어줍니다.
2. 나감을 accessList에 넣어줍니다.
-> 나갈 때는 닉네임을 바꿀 수 없기 때문에 HashMap에 put해주지 않아도 됩니다.
만약 Change가 들어왔다면
1. <userid, nickname>을 HashMap에 put해줍니다.
위의 항목이 모두 끝났다면
<userid, nickname> 과 accessList를 이용해서
문장을 만들어줍니다!
끝~
'알고리즘 > 프로그래머스 lv2 다시풀기' 카테고리의 다른 글
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 파일명 정렬 -Java (0) | 2021.03.16 |
---|---|
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 방금그곡 -Java (0) | 2021.03.16 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 캐시 -Java (0) | 2021.03.15 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 프렌즈 4블록 -Java (0) | 2021.03.15 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 뉴스 클러스터링 -Java (0) | 2021.03.14 |