제목이 귀여워서 풀게 된 문제이다..
구현이며, 해당 소의 번호와 이동을 나눠서 저장해주면 된다. 이동이 전과 다르다면 sum++를 해주는 방식이다.
시간제한이 2초, 512mb이므로 2차원 리스트를 사용했다.(번호를 출력하지는 않아도 되기때문에 1차원 배열로 이동만 저장해도 될 것 같다. 하지만 2차원 리스트 연습을 위해서 이렇게 풀었당..)
0번 or 1번만 이동한 소들은 제외시켜야 한다.
import java.util.*;
public class Main {
static ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
public static void main (String[]args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int sum = 0;
for(int i=0; i<101; i++){
list.add(new ArrayList<Integer>());
}
for(int i=0; i<n; i++){
int num = scanner.nextInt();
int dir = scanner.nextInt();
list.get(num).add(dir);
}
for(int i=0; i<101; i++){
if(!(list.get(i).size() <= 1)){ //해당 인덱스가 1이면 돌아오지 않음.
int k = list.get(i).get(0);
for(int j=1; j<list.get(i).size(); j++){
if(k != list.get(i).get(j)){
k = list.get(i).get(j);
sum++;
}
}
}
}
System.out.print(sum);
}
}