import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
int len = participant.length;
int j = 0;
int max = len - 1;
for (String s : participant) {
if (j == max) {
return s;
}
if (!s.equals(completion[j++])) {
return s;
}
}
return "";
}
}
예전에 풀었던 문제여서 따로 다시 풀진 않았습니다.
이런 문제는 그냥 간단하게 푸는 것도 괜찮다고 생각합니다.
import java.util.*;
class Solution {
public String[] solution(String[] record) {
Room room = new Room(record);
return room.getLogs();
}
static class Room {
Queue<Info> infoLogs = new LinkedList<>();
Map<String, String> names = new HashMap<>();
Room(String[] record) {
for (String row : record) {
String[] strings = row.split(" ");
if("Leave".equals(strings[0])) {
infoLogs.add(new Leave(strings[1]));
}
if ("Enter".equals(strings[0])) {
infoLogs.add(new Enter(strings[1]));
names.put(strings[1], strings[2]);
}
if ("Change".equals(strings[0])){
names.put(strings[1], strings[2]);
}
}
}
public String[] getLogs() {
return infoLogs.stream()
.map(info -> info.print(names))
.toArray(String[]::new);
}
}
static class Enter implements Info {
private final String id;
Enter(String id) {
this.id = id;
}
public String print(Map<String, String> names) {
return names.get(id) + "님이 들어왔습니다.";
}
}
static class Leave implements Info {
private final String id;
Leave(String id) {
this.id = id;
}
public String print(Map<String, String> names) {
return names.get(id) + "님이 나갔습니다.";
}
}
}
interface Info {
String print(Map<String, String> nameStorage);
}
- Enter 와 Leave 를 객체로 만들어 Queue 에 저장해서 그대로 출력만 해주면 될 것이라고 생각함
- id 와 이름을 key-value 저장소에 저장하여 관리하면 될 것이라고 생각하여 hashmap 사용
- 저장해 둔 그대로 출력
- 문자열을 객체로 만드는 과정을 조금 더 리팩토링 하고 싶지만 좋은 아이디어가 생각나지 않아 보류함..