일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- floor
- 큰 수 나누기
- ceil
- flask
- list comprehension
- datetime
- itertools
- project euler
- mysql
- 네이밍
- FOREIGN KEY
- BOJ
- 파이썬
- 리스트 컴프리헨션
- 딕셔너리
- timestamp
- python
- 외래키
- 소수
- 2557
- 세그먼트 트리
- 자료구조
- 에라토스테네스의 체
- SUM
- SUM()
- Dictionary
- enumerate
- lower_case_table_names
- convention
- Codeforces
Archives
- Today
- Total
늒네 기록
[BOJ-JS] 17848번 - Flight Turbulence 본문
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)
반응형
'알골 공부 기록 > BOJ' 카테고리의 다른 글
[BOJ-JS] 4363번 - Snow Clearing (0) | 2024.05.17 |
---|---|
[BOJ-JS] 5991번 - Papaya Jungle (0) | 2024.05.08 |
[BOJ-JS] 12852번 - 1로 만들기 2 (0) | 2024.05.05 |
[BOJ-JS] 17204번 - 죽음의 게임 (0) | 2024.05.04 |
[BOJ-JS] 15886번 - 내 선물을 받아줘 2 (0) | 2024.05.03 |
Comments