새소식

알고리즘 테스트 ⏲/백준

[백준] 5014. 스타트링크 풀이 (Python, JavaScript)

  • -
 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

5014. 스타트링크

접근한 방법

단순 조건 분할과 반복문으로 풀이합니다. 

1. 현재 s값을 기준으로 목표층(target)보다 적을 때,

- 위층을 더한 것이 전체층 이내라면 위층으로 간다.

- 아래층을 뺀 것이 전체층 이내라면 아래층으로 간다.

 

2. 현재 s값을 기준으로 목표층보다 클 때,

- 아래층을 뺀 것이 전체층 이내라면 아래층으로 간다.

- 위층을 더한 것이 전체층 이내라면 위층으로 간다.

 

예를 들면 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);
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.