✔ 난이도 - ⚪ Silver 5


HashMap에 입력을 받고 iterator를 통해 value값이 'enter'인 사람만 ArrayList에 넣어 내림차순으로 출력해줌
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
ArrayList<String> enterPeople = new ArrayList<>();
HashMap<String, String> hm = new HashMap<>();
for(int i = 0; i < num; i++){
String[] str = br.readLine().split(" ");
hm.put(str[0], str[1]);
}
Set<Map.Entry<String, String>> entrySet = hm.entrySet();
Iterator<Map.Entry<String, String>> itr = entrySet.iterator();
while (itr.hasNext()) {
Map.Entry<String, String> eachEntry = itr.next();
if (eachEntry.getValue().equals("enter")){
enterPeople.add(eachEntry.getKey());
}
}
Collections.sort(enterPeople, Collections.reverseOrder());
br.close();
for(String s : enterPeople){
sb.append(s).append("\n");
}
System.out.println(sb);
}
}
HashMap에 입력받은 사람이 없다면 add, 있다면 remove
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
HashMap<String, String> enterPeople = new HashMap<>();
int num = Integer.parseInt(br.readLine());
for(int i = 0; i < num; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String name = st.nextToken();
String log = st.nextToken();
if (!enterPeople.containsKey(name)){ //HashMap에 해당 사람이 없으면(enter을 안했으면) put
enterPeople.put(name, log);
}
else { //HashMap에 해당 사람이 있으면(enter을 했으면) remove
enterPeople.remove(name);
}
}
ArrayList<String> result = new ArrayList<>(enterPeople.keySet());
Collections.sort(result, Collections.reverseOrder());
br.close();
for(String s : result){
sb.append(s).append("\n");
}
System.out.println(sb);
}
📌 풀이2의 방법이 메모리를 더 적제 잡고 시간도 빠르다!

📌 문자열을 입력받고 공백을 기준으로 문자열을 나눌때 풀이1에서는 split을 사용했다. 그러나 split은 느리기때문에 효율성을 생각하여 풀이2처럼 StringTokenizer를 사용하자!