본문 바로가기
백준

[백준 7785/Java] 회사에 있는 사람

by naahy 2023. 10. 9.

https://www.acmicpc.net/problem/7785

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net

 


 

무난하게 통과한 문제인데 다른 방법을 쓰면 시간을 줄일 수 있지 않을까 싶어 시도해봤다가 오히려 시간 초과가 남

찾아보니 배열 별로 연산 시간이 달라서 이렇게 된 듯

통과한 풀이는 HashMap을 사용했었고 시간 초과난 풀이는 ArrayList를 사용했었다

 

📝 참고
https://www.grepiu.com/post/9
https://lifeofyoori.tistory.com/77

 


 

풀이

  1. 로그 기록할 HashMap<String, String> ==> 이름, 출퇴근 정보
  2. 한 줄씩 입력 받아 이름과 출퇴근 저장
    1. 같은 key로 put하면 해당 key의 value 값이 수정되는 것 이용
  3. 사람의 이름을 사전 순의 역순으로 출력하기 위해 HashMap의 keySet을 ArrayList로 받아와 내림차순 정렬
    1. 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 (시간초과)

  1. 직원명 저장할 ArrayList<String>
  2. 한 줄씩 입력 받아 해당 직원이 출근(enter)했으면 리스트에 추가
  3. 사람의 이름을 사전 순의 역순으로 출력하기 위해 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);
	}

}

댓글