🕐풀이시간 : 1시간 반
실버3 문제로 그렇게 어려운 문제는 아니였다.
그런데 처음에 문제를 잘못 이해해서 이상한 코드를 작성하는 바람에 시간을 30분 정도 낭비했다.
한 번 읽고 멋대로 이해했다 생각하지말고 한 번 더 읽자! 그게 시간적으로 훨씬 이득임!
문제를 제대로 이해하고도 제대로 구현해내지를 못했다. 그래도 답지를 보고 코딩하지 않고 풀어서 뿌듯하긴한데 시뮬,구현 문제에 여전히 약하다.
아무튼 풀이를 하려고 했던 방향은 <중요도, 찾고 있는 값인지> 를 저장하는 클래스를 만들고, while문을 통해서 최상인 중요도인 문서만 출력하면서계속 돌면서 혹시나 이번에 뽑은 게 찾고 있는 값인지 확인하려고 했다!
반복문을 que.size()로 잡아두었다..반복은 true로 계속해야한다. 우리가 원하는 값을 찾을 때까지!!
값을 처음에 확인할 때 get을 통해 확인을 했다. 이 부분은 정답과는 그렇게 중요한 건 아닌데 처음부터 remove를 하고 값을 변수로 받아두고 만약 최상 중요도가 아니면 빋아둔 변수를 다시 add하면 되서 더 좋은 코드가 된다!
이 외에도 자잘하게 여러 곳을 많이 고쳤는데 더 생각이 안난다.
import java.io.*;
import java.util.*;
public class Main {
static class Document{
int prior;
int isFind;
public Document(int a, int b){
this.prior = a;
this.isFind = b;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i = 0 ; i < T; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int doc = Integer.parseInt(st.nextToken());
int target = Integer.parseInt(st.nextToken());
List<Document> ary = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int j = 0 ; j < doc; j++){
int value = Integer.parseInt(st.nextToken());
if (j == target)
ary.add(new Document(value, 1));
else
ary.add(new Document(value, 0));
}
int cnt = 0;
while(true){
Document curDoc = ary.remove(0);
int max= 0;
for(int m = 0 ; m < ary.size();m++){
max = Math.max(max, ary.get(m).prior);
}
if(max <= curDoc.prior) {
cnt++;
if(curDoc.isFind == 1){
System.out.println(cnt);
break;
}
}
else if(max != curDoc.prior)
ary.add(curDoc);
}
}
}
}