문제
https://school.programmers.co.kr/learn/courses/30/lessons/42888
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
<1번 풀이>
직접 코드의 로직을 구현했다.
listIdx를 이용하여 uid에 대해 해당 answer가 위치한 idx를 저장해주어 시간초과가 안나도록 만들어 주었다.
import java.util.*;
class Solution {
List<String> answer = new ArrayList<>();
HashMap<String, String> map = new HashMap<>();
HashMap<String, String> listIdx = new HashMap<>();
public List<String> solution(String[] record) {
for(int i=0;i<record.length;i++){
String arr [] = record[i].split(" ");
if(arr.length == 2){ //LEAVE
answer.add(map.get(arr[1])+"님이 나갔습니다.");
listIdx.put(arr[1], listIdx.get(arr[1])+" "+(answer.size()-1));
}
else{
if(arr[0].equals("Enter")){
answer.add(arr[2]+"님이 들어왔습니다.");
if(map.containsKey(arr[1])){
change(arr[1], arr[2]);
listIdx.put(arr[1], listIdx.get(arr[1])+" "+(answer.size()-1));
}
else{
listIdx.put(arr[1], answer.size()-1+"");
}
map.put(arr[1], arr[2]);
}
else{ // change
map.put(arr[1], arr[2]);
change(arr[1], arr[2]);
}
}
}
return answer;
}
public void change(String uid, String name){
String idxs = listIdx.get(uid);
String idxList [] = idxs.split(" ");
for(String idx : idxList){
int id = Integer.parseInt(idx);
String str [] = answer.get(id).split(" ");
answer.remove(id);
answer.add(id, name+"님이 "+str[1]);
}
}
}
<2번 풀이>
import java.util.*;
class Solution {
public List<String> solution(String[] record) {
HashMap<String, String> map = new HashMap<>();
for(int i=0;i<record.length;i++){
String str [] = record[i].split(" ");
if(str.length == 3)
map.put(str[1], str[2]);
}
List<String> answer = new ArrayList<>();
for(int i=0;i<record.length;i++){
String str [] = record[i].split(" ");
if(str.length == 2){
answer.add(map.get(str[1])+"님이 나갔습니다.");
}
else if(str[0].equals("Enter")){
answer.add(map.get(str[1])+"님이 들어왔습니다.");
}
}
return answer;
}
}