[문제]
출처 - https://programmers.co.kr/learn/courses/30/lessons/42888?language=java
[문제 풀이]
StringTokenizer , HashMap, List 를 사용하여 풀 수 있습니다.
-record에 있는 각 단어는 공백으로 구분되기 때문에 StringTokenizer를 활용하여 값을 토큰화 하여 사용한다.
-HashMap 에 아이디(key)와 닉네임(value) 로 저장을 하게 되는데 key 값은 같은데 value만 다르면 새롭게 추가하지않고 해당 key 에 value 를 넣게된다.
-ArrayList 에 명령어를 입력받아 key값에 따른 문구를 저장한다.
- record 의 입력이 공백으로 주어져 StringTokenizer를 사용하여 Enter, Leave, Change 를 입력받는다.
- 'Enter' 와 'Change' 으로만 닉네임이 변경되기 때문에 먼저 닉네임을 HashMap( 아이디(key), 닉네임(value))으로 저장한다.
- 그다음 Enter 와 Leave 에서 ID에 따라 닉네임 + "들어왔습니다" , "나갔습니다" 를 각각 List에 담는다.
- answer배열을 List의 Size만큼 크기를 만들어주고 List를 toArray 써서 배열에 넣어주면 완성입니다.
[소스 코드]
import java.util.*;
class Solution {
public String[] solution(String[] record) {
String[] answer = {};
Map<String, String> idMap= new HashMap<>();
List<String> chatLog = new ArrayList<>();
for(String str : record) {
StringTokenizer st = new StringTokenizer(str);
String cmd = st.nextToken();
if(cmd.equals("Enter") || cmd.equals("Change")) {
String id = st.nextToken();
String name = st.nextToken();
idMap.put(id, name);
}
}
for(String str : record) {
StringTokenizer st = new StringTokenizer(str);
String cmd = st.nextToken();
if(cmd.equals("Enter")) {
String id = st.nextToken();
String name = idMap.get(id);
chatLog.add(name + "님이 들어왔습니다.");
}else if(cmd.equals("Leave")) {
String id = st.nextToken();
String name = idMap.get(id);
chatLog.add(name + "님이 나갔습니다.");
}
}
answer = new String[chatLog.size()];
chatLog.toArray(answer);
return answer;
}
}
-참고 https://www.youtube.com/watch?v=TFMDF-BVOAs (ezsw)
'프로그래머스' 카테고리의 다른 글
[프로그래머스 Level2] 문자열 압축 (JAVA) - 2020 Kakao (0) | 2022.02.01 |
---|---|
[프로그래머스 Level3] - 디스크 컨트롤러 (JAVA) (1) | 2022.01.17 |
[프로그래머스 Level2] 더 맵게 (JAVA) (0) | 2022.01.12 |
[프로그래머스 Level2] 소수 찾기 (JAVA) (0) | 2022.01.04 |
[프로그래머스 Level2] 타겟 넘버(JAVA) (0) | 2021.12.28 |