반응형
수많은 시간초과와 틀렸습니다를 거쳐서 해결하였다...
❗️❗️ 틀린 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
String sit = st.nextToken();
if(map.containsValue("leave")){
map.remove(name);
}else{
map.put(name, sit);
}
}
ArrayList<String> list = new ArrayList<String>();
for(String name : map.keySet()){
list.add(name);
}
Collections.sort(list, Collections.reverseOrder());
for(int i=0; i<list.size(); i++){
bw.write(list.get(i) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
우선 나는 map.containsValue("leave")를 이용해서 문제를 풀려고 했다. 근데 그게 생각보다 시간을 많이 잡아먹는 코드였는지 시간초과 에러가 발생하였다.
그래서 결국 그 부분을 sit.equals("leave")로 바꾸어 해결하였다.
🤓해결한 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
String sit = st.nextToken();
if(sit.equals("leave")){
map.remove(name);
}else{
map.put(name, sit);
}
}
ArrayList<String> list = new ArrayList<String>();
for(String name : map.keySet()){
list.add(name);
}
Collections.sort(list, Collections.reverseOrder());
for(int i=0; i<list.size(); i++){
bw.write(list.get(i) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
다른 분들 코드보니 for문 돌려서 list.add() 안하고
ArrayList<String> list = new ArrayList<String>(map.keySet());
으로 바로 값을 넣을 수 있는 것 같다.....
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 14425 - 문자열 집합 (JAVA/ 자바) (0) | 2024.07.16 |
---|---|
[백준] 10815 - 숫자 카드 (JAVA/ 자바) (0) | 2024.07.14 |
[백준] 18870 - 좌표 압축 (JAVA/ 자바) (0) | 2024.06.26 |
[백준] 10814 - 나이순 정렬 (JAVA/ 자바) (0) | 2024.06.18 |
[백준] 1181 - 단어 정렬 (JAVA/ 자바) (1) | 2024.06.13 |