https://www.acmicpc.net/problem/7785
무난하게 통과한 문제인데 다른 방법을 쓰면 시간을 줄일 수 있지 않을까 싶어 시도해봤다가 오히려 시간 초과가 남
찾아보니 배열 별로 연산 시간이 달라서 이렇게 된 듯
통과한 풀이는 HashMap을 사용했었고 시간 초과난 풀이는 ArrayList를 사용했었다
📝 참고
https://www.grepiu.com/post/9
https://lifeofyoori.tistory.com/77
풀이
- 로그 기록할 HashMap<String, String> ==> 이름, 출퇴근 정보
- 한 줄씩 입력 받아 이름과 출퇴근 저장
- 같은 key로 put하면 해당 key의 value 값이 수정되는 것 이용
- 사람의 이름을 사전 순의 역순으로 출력하기 위해 HashMap의 keySet을 ArrayList로 받아와 내림차순 정렬
- Collections.sort(리스트명, Collections.reversOrder())
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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));
int n = Integer.parseInt(br.readLine());
HashMap<String, String> employees = new HashMap<String, String>();
StringTokenizer st;
for (int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
employees.put(st.nextToken(), st.nextToken());
}
ArrayList<String> names = new ArrayList<String>(employees.keySet());
StringBuilder sb = new StringBuilder();
Collections.sort(names, Collections.reverseOrder());
for (String name: names) {
if (employees.get(name).equals("enter"))
sb.append(name + "\n");
}
System.out.println(sb);
}
}
풀이2 (시간초과)
- 직원명 저장할 ArrayList<String>
- 한 줄씩 입력 받아 해당 직원이 출근(enter)했으면 리스트에 추가
- 사람의 이름을 사전 순의 역순으로 출력하기 위해 ArrayList 내림차순 정렬
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<String> employees = new ArrayList<String>();
StringTokenizer st;
for (int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
String name = st.nextToken();
if (st.nextToken().equals("enter"))
employees.add(name);
else
employees.remove(name);
}
employees.sort(Collections.reverseOrder());
StringBuilder sb = new StringBuilder();
for (String name: employees)
sb.append(name + "\n");
System.out.println(sb);
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 1003/Java] 피보나치 함수 (0) | 2023.10.17 |
---|---|
[백준 1874/Java] 스택 수열 (0) | 2023.10.11 |
[백준 24267/Java] 알고리즘 수업 - 알고리즘의 수행 시간 6 (1) | 2023.09.26 |
[백준 2477/Java] 참외밭 (0) | 2023.02.16 |
[백준 1620/Java] 나는야 포켓몬 마스터 이다솜 (0) | 2023.02.06 |
댓글