[C++] 백준/Silver/5014. 스타트링크

2025. 2. 5. 20:25·C++/Coding Test

문제: 스타트링크 (백준 5014번)

문제 분석

스타트링크라는 고층 건물에는 총 f층이 있고, 현재 s층에 있는 사람이 g층으로 가야 한다. 엘리베이터에는 위로 u층, 아래로 d층만 이동할 수 있는 버튼이 있다. 주어진 조건 내에서 최소한으로 버튼을 눌러 목표 층에 도착해야 한다. 만약 도착할 수 없다면 "use the stairs"를 출력해야 한다.

핵심 아이디어

  1. BFS 큐 초기화
    현재 층(s)을 큐에 삽입하고, visited 벡터를 활용해 방문한 층과 해당 층까지의 버튼 누른 횟수를 기록했다.
  2. 층 이동 로직
    큐에서 노드를 꺼낸 뒤:
    • 위로 이동: 현재 층 + u가 건물의 총 층수 f를 넘지 않으면서 방문한 적이 없다면 큐에 추가.
    • 아래로 이동: 현재 층 - d가 1층 이상이면서 방문한 적이 없다면 큐에 추가.
  3. 종료 조건
    • 목표 층 g에 도착하면 버튼 누른 횟수를 출력하고 종료.
    • BFS가 끝나도 도착하지 못했다면 "use the stairs"를 출력.

전체 코드

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int f, s, g, u, d; 
    cin >> f >> s >> g >> u >> d;

    queue<int> bfs;
    vector<int> visited(f + 1, -1);  // 방문 여부 및 누른 횟수 저장
    bfs.push(s);
    visited[s] = 0;  // 시작 층은 0회로 초기화

    while (!bfs.empty()) {
        int node = bfs.front();
        bfs.pop();
        if (node == g) break;  // 목표 층 도착 시 종료

        // 아래로 이동
        if (node - d > 0 && visited[node - d] == -1) {
            visited[node - d] = visited[node] + 1;
            bfs.push(node - d);
        }
        // 위로 이동
        if (node + u <= f && visited[node + u] == -1) {
            visited[node + u] = visited[node] + 1;
            bfs.push(node + u);
        }
    }

    // 결과 출력
    if (visited[g] == -1) 
        cout << "use the stairs";
    else 
        cout << visited[g];
}

'C++ > Coding Test' 카테고리의 다른 글

[C++] 백준/Gold/2504. 괄호의 값  (2) 2025.02.07
[C++] 백준/Gold/1068. 트리  (0) 2025.02.06
[C++] 백준/Silver/1309. 동물원  (0) 2025.02.04
[C++] 백준/Gold/1655. 가운데를 말해요  (1) 2025.02.03
[C++] 백준/Silver/1004. 어린 왕자  (0) 2025.01.24
'C++/Coding Test' 카테고리의 다른 글
  • [C++] 백준/Gold/2504. 괄호의 값
  • [C++] 백준/Gold/1068. 트리
  • [C++] 백준/Silver/1309. 동물원
  • [C++] 백준/Gold/1655. 가운데를 말해요
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • C++ (60)
        • Coding Test (53)
        • Study (1)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (21)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (10)
        • EOS (1)
      • Computer Science (7)
        • Algorithm (3)
      • Other (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    CUDA
    그래프 탐색
    C++
    BFS
    Rendering Pipeline
    정렬
    위상 정렬
    수학
    자료 구조
    unreal 5
    OpenGL
    dp
    GPU Programming
    아이작 맵 생성
    UE5
    Fluid Simulation
    구현
    FPS
    CS
    Algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[C++] 백준/Silver/5014. 스타트링크
상단으로

티스토리툴바