15464번 The Bovine Shuffle
이왜틀?
15464번 The Bovine Shuffle - 백준
int n=Integer.parseInt(br.readLine());
int[][] arr=new int[n][2];
StringTokenizer st=new StringTokenizer(br.readLine()," ");
for(int i=0;i<n;i++) arr[i][0]=Integer.parseInt(st.nextToken());
st=new StringTokenizer(br.readLine()," ");
for(int i=0;i<n;i++) arr[i][1]=Integer.parseInt(st.nextToken());
Arrays.sort(arr,new Comparator<int[]>() {
@Override
public int compare(int[] a,int[] b) {
return a[0]-b[0];
}
});
for(int i=0;i<n;i++) bw.write(arr[i][1]+"\n");
좀 주석이랑 엔터 좀 해두지 좀
정렬 시도는 좋았다.
그런데 이 문제는 3회 셔플 후 결과를 제시하고 처음 순서를 구하는 거라 역순으로 3회 계산해야한다.
설계
예제를 보자.
1 3 4 5 2
2번 소를 3으로 보내고 3번 소를 4로 보내고 하는 식이다.
우리는 역순으로 찾아야 하므로
3번 소를 2로 가져오고 4번 소를 3으로 가져오는 식으로 처리해야 한다.
3번 반복을 시뮬레이션 해보면
2번째 소는 3 -> 4 -> 5, 현재 5번째 소
3번째 소는 4 -> 5 -> 2, 현재 2번째 소
실버 문제에서 트리를 그릴 필요는 없고 배열로 충분하다.
구현
N = int(input())
shuffle = list(map(int, input().split()))
cows = list(map(int, input().split()))
for i in range(N):
idx = i
for j in range(3):
idx = shuffle[idx] - 1
print(cows[idx])
채점
반성
브론즈와 실버 문제의 차이는
브론즈는 그냥 쉽고 실버는 쉬운 문제를 말로 꼬아둔 느낌이다.
진짜 문제는 골드부터지.
코드 확인