예를 들면 s가 9, target이 10, u = 2, d = 1 와 같은 상황에서는 아래층으로 가야할 것입니다.
매 방문마다 방문처리를 해주고 이미 방문한 층을 다시 되돌아왔다면(그래프로 표현하자면 사이클인 상황) 목표층을 절대 갈 수 없다는 뜻이므로 use the stairs를 출력합니다.
Python
import sys
input = sys.stdin.readline
n, s, target, u, d = map(int, input().split())
visited = [0] * (n + 1)
result = 0
while True:
if visited[s]:
print("use the stairs")
break
visited[s] = 1
if s == target:
print(result)
break
elif s < target:
if s + u <= n:
s += u
elif s - d >= 1:
s -= d
elif s > target:
if s - d >= 1:
s -= d
elif s + u <= n:
s += u
result += 1
JavaScript
function solution(n, s, target, u, d) {
const visited = Array(n + 1).fill(0);
let result = 0;
while (true) {
if (visited[s]) return "use the stairs";
visited[s] = 1;
if (s === target) return result;
else if (s < target) {
if (s + u <= n) s += u;
else if (s - d >= 1) s -= d;
} else if (s > target) {
if (s - d >= 1) s -= d;
else if (s + u <= n) s += u;
}
result += 1;
}
}
solution(100, 2, 1, 1, 0);