늒네 기록

[BOJ-JS] 17848번 - Flight Turbulence 본문

알골 공부 기록/BOJ

[BOJ-JS] 17848번 - Flight Turbulence

jaeha lee 2024. 5. 8. 21:51

17848번: Flight Turbulence (acmicpc.net)

 

문제를 이해해보자면 다음과 같다.

  • n명의 사람이 자리에 앉아있음. 그런데 원래 앉아야 하는 자리가 아닌 곳에 앉아있을 수 있다.
  • m번째 사람이 갑자기 본인 자리에 앉고 싶어짐. 예를 들어, 원래 3번째 자리에 앉아야 하는 사람이 4번째 자리에 앉아있었다가, 원래 앉았어야 하는 자리로 가려고 한다.
  • 그래서 3번째 자리에 앉아있던 사람을 쫓아내고 앉아버린다. 그럼 이제 원래 3번째 자리에 앉아있던 사람이 원래 할당된 자리로 가야 한다.
  • 만약 3번째 사람의 원래 자리가 4번째 자리였다면 방금 4번 자리에서 사람이 온 것이니 비어있을 것이다. 그럼 그냥 가서 앉으면 된다.
  • 그게 아니라 3번째 사람의 원래 자리가 2번째 자리였다면, 또 앉아있는 사람을 쫓아내고 새로운 사람이 일어나서 원래 자리로 돌아가려고 한다.
  • ... 이런 일이 쭉 일어난다고 했을때, 총 몇 명의 사람들이 자리 이동을 해야 하는가?

간단한 시뮬레이션 문제. 코드를 보면 바로 이해가 가능하다. 단, 이 문제가 순열 사이클 문제와 크게 다른 지점은, 처음 일어난 사람이 원래 본인 자리에 앉아있었다면 그냥 그대로 앉으면 되고, 자리 이동이 일어나지 않았으므로 답이 1이 아니라 0이 된다는 것. 실수하기 쉽다.

[,...a]=(0+require('fs').readFileSync(0)).split(/\n|\s/)
m=a[0]
i=1
while((m=a[m])!=a[0])i++
console.log(i-1?i:0)
반응형
Comments