https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
import java.io.*;
import java.util.*;
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,Boolean> record = new HashMap();
for(int i=0; i<n; i++){
String[] temp = br.readLine().split(" ");
if(temp[1].equals("enter")){
record.put(temp[0],true);
}else{
record.put(temp[0],false);
}
}
List<String> names = new ArrayList<>();
for(String name : record.keySet()){
if(record.get(name)){
names.add(name);
}
}
Collections.sort(names, Collections.reverseOrder());
for(String s : names){
bw.write(s+"\n");
}
bw.flush();
}
}
Set 을 이용
import java.util.*;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Set<String> entered = new TreeSet<>();
for (int i = 0; i < N; i++) {
String name = sc.next();
String status = sc.next();
if (status.equals("enter"))
entered.add(name);
else entered.remove(name);
}
String[] orderedAnswer = entered.toArray(new String[entered.size()]);
for (int i = orderedAnswer.length - 1; i >= 0; i--)
System.out.println(orderedAnswer[i]);
}
}
정렬을 이용
import java.io.*;
import java.util.*;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String[][] records = new String[N][2];
for (int i = 0; i < N; i++) {
records[i][0] = sc.next();
records[i][1] = sc.next();
}
Arrays.sort(records, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o2[0].compareTo(o1[0]);
}
});
for (int i = 0; i < N - 1; i++) {
if (records[i][1].equals("enter") && !records[i][0].equals(records[i + 1][0]))
System.out.println(records[i][0]);
}
if (records[N - 1][1].equals("enter"))
System.out.println(records[N - 1][0]);
}
}
'Problem Solving > 정렬' 카테고리의 다른 글
BOJ18870 좌표압축 (0) | 2024.02.06 |
---|---|
BOJ1302 베스트셀러 (0) | 2024.02.06 |
BOJ10814 나이순 정렬 (0) | 2024.02.05 |
BOJ1181 단어 정렬 (0) | 2024.02.05 |
광물 캐기 (1) | 2023.10.16 |
https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
import java.io.*;
import java.util.*;
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,Boolean> record = new HashMap();
for(int i=0; i<n; i++){
String[] temp = br.readLine().split(" ");
if(temp[1].equals("enter")){
record.put(temp[0],true);
}else{
record.put(temp[0],false);
}
}
List<String> names = new ArrayList<>();
for(String name : record.keySet()){
if(record.get(name)){
names.add(name);
}
}
Collections.sort(names, Collections.reverseOrder());
for(String s : names){
bw.write(s+"\n");
}
bw.flush();
}
}
Set 을 이용
import java.util.*;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Set<String> entered = new TreeSet<>();
for (int i = 0; i < N; i++) {
String name = sc.next();
String status = sc.next();
if (status.equals("enter"))
entered.add(name);
else entered.remove(name);
}
String[] orderedAnswer = entered.toArray(new String[entered.size()]);
for (int i = orderedAnswer.length - 1; i >= 0; i--)
System.out.println(orderedAnswer[i]);
}
}
정렬을 이용
import java.io.*;
import java.util.*;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String[][] records = new String[N][2];
for (int i = 0; i < N; i++) {
records[i][0] = sc.next();
records[i][1] = sc.next();
}
Arrays.sort(records, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o2[0].compareTo(o1[0]);
}
});
for (int i = 0; i < N - 1; i++) {
if (records[i][1].equals("enter") && !records[i][0].equals(records[i + 1][0]))
System.out.println(records[i][0]);
}
if (records[N - 1][1].equals("enter"))
System.out.println(records[N - 1][0]);
}
}
'Problem Solving > 정렬' 카테고리의 다른 글
BOJ18870 좌표압축 (0) | 2024.02.06 |
---|---|
BOJ1302 베스트셀러 (0) | 2024.02.06 |
BOJ10814 나이순 정렬 (0) | 2024.02.05 |
BOJ1181 단어 정렬 (0) | 2024.02.05 |
광물 캐기 (1) | 2023.10.16 |