반응형
주의할점
1. 학번은 Integer형이 아닌 String으로 받아야한다. (예를들어 012345678이라는 학번은 Integer형으로 받을시 1234578로 데이터의 변형이 발생한다.)
2. (수강가능인원) > (대기목록의길이) 인 경우를 생각해아한다. ((IndexOutOfBounds) 발생 가능성)
처음 작성한 코드.
- HashMap을 통해서 중복제거와 동시에 우선순위를 뜻하는 key를 넣어준다.(순서 역할)
- ArrayList에 위 key를 이용한 Student 객체를 넣어주고 정렬한다.
- ArrayList에서 필요한 객체를 순서대로 반환한다.
import java.io.*;
import java.util.*;
public class Main {
static int k, l;
static HashMap<String, Integer> hm;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
l = Integer.parseInt(st.nextToken());
hm = new HashMap<>();
for (int i = 0; i < l; i++) {
String id = br.readLine();
hm.put(id, i);
}
ArrayList<Student> list = new ArrayList<>();
for (String ids : hm.keySet()) {
list.add(new Student(ids, hm.get(ids)));
}
list.sort(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.num - o2.num;
}
});
StringBuilder sb = new StringBuilder();
for (int i = 0; i < k; i++) {
if (list.size() == i) break;
sb.append(list.get(i).id).append('\n');
}
System.out.print(sb.toString());
}
static class Student {
String id;
int num;
public Student(String id, int num) {
this.id = id;
this.num = num;
}
}
}
LinkedHashSet을 이용한 코드.
: Linked HashSet을 사용할 때 이미 학번이 있으면 지워버리는 작업을 통해 중복제거 및 순위 미루기를 할 수 있다.
LinkedHashSet은 순서가 있으므로 출력할때 iterator를 사용하여 출력가능.
import java.io.*;
import java.util.*;
public class Main {
static int k, l;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
k = Integer.parseInt(st.nextToken());
l = Integer.parseInt(st.nextToken());
LinkedHashSet<String> set = new LinkedHashSet<>();
for (int i = 0; i < l; i++) {
String id = br.readLine();
set.remove(id);
set.add(id);
}
StringBuilder sb =new StringBuilder();
int count=0;
Iterator<String> iter= set.iterator();
while(iter.hasNext() && count<k){
sb.append(iter.next()).append('\n');
count++;
}
System.out.print(sb.toString());
}
}
반응형
'코딩테스트 > Java' 카테고리의 다른 글
[JAVA] 백준 그대, 그머가 되어 (0) | 2022.02.25 |
---|---|
[JAVA] 백준 끝나지 않는 파티(플로이드워셜) (0) | 2022.02.14 |
[JAVA] 백준 감소하는 수 (0) | 2022.02.06 |
[JAVA] 백준 과자 나눠주기 (0) | 2022.02.02 |
[JAVA] 백준 가장 긴 증가하는 수열 (0) | 2022.01.10 |