입력 받은 문자열(번호판)의 종류나 순서, 길이가 동적이라 배열과 Index를 활용하긴 어려울 것 같았다.
따라서 Map을 활용하여 Key로 번호판, Value로 순서로 값을 관리하는 것이 좋겠다.
단순히 나오는 순서만 고려한다면, 문제에 기입된 테스트 케이스 외에 반례를 통과할 수 없었다.
(1명을 추월했으나, 다른 1명에게 추월당해서 결과적으로 나오는 순서는 똑같은 경우)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
public class BOJ_3_2002 {
public static void main(String[] args) throws IOException {
// 문자열 여러개에 대해 값 비교, 숫자 카운트 등을 하려하면, 인덱스를 알기 어렵거나 동적인 경우가 많다 -> 맵을 써보자
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
HashMap<String,Integer> ys = new HashMap<>();
for (int i = 0; i < N; i++) {
ys.put(bf.readLine(), i);
}
int[] arr = new int[N];
// 나간 순서대로 불러서 배열에 담음
for (int i = 0; i < N; i++) {
arr[i]=ys.get(bf.readLine());
}
int count = 0;
// 추월을 안했으면 오름차순으로 정렬이 되어 있어야 함
for (int i = 0; i < N-1; i++) {
for (int j = i+1; j < N; j++) {
if(arr[i]>arr[j]) {
count++;
break;
}
}
}
System.out.println(count);
}
}
Map 자료구조에 어느정도 익숙해진 것 같다. 문제를 보고 떠올릴 수 있을 정도가 되었다.
주어져 있는 Test Case 통과만 고려하지 말자는 교훈을 얻었다 ^_^;
글 잘 봤습니다.