Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- Priority Queue
- Python
- 코테
- BFS
- 구현
- 코딩테스트
- aws
- boj
- 시뮬레이션
- Algorithm
- SWEA
- django
- JavaScript
- Data Structure
- 알고리듬
- Back tracking
- 알고리즘
- spring boot
- Bruth Force
- DFS
- Vue.js
- SQL
- 모의SW역량테스트
- CSV
- gpdb
- GitHub
- Trie
- Linked list
- hash table
- programmers
Archives
- Today
- Total
hotamul의 개발 이야기
[Algorithm][C++] BOJ 5014 스타트링크 본문
url: https://www.acmicpc.net/problem/5014
5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net
풀이 핵심
1. BFS 활용
2. visited 배열을 이용해 중복 방문 방지
3. 목적 층 G 에 도달하지 못하면 -1 return
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <queue>
using namespace std;
int F, S, G;
int df[2]; // df[0] (UP), df[1] (DOWN)
int ans;
struct elevator {
int floor, cnt;
};
queue<elevator> q;
int bfs() {
bool *visited = new bool[F + 1];
for (int i = 1; i <= F; i++) visited[i] = false;
q.push({ S, 0 });
visited[S] = true;
while (!q.empty()) {
elevator cur = q.front();
q.pop();
if (cur.floor == G) {
delete[] visited;
return cur.cnt;
}
for (int dir = 0; dir < 2; dir++) {
int nf = cur.floor + df[dir];
if (nf < 1 || nf > F) continue;
if (visited[nf]) continue;
q.push({ nf, cur.cnt + 1 });
visited[nf] = true;
}
}
delete[] visited;
return -1;
}
int main() {
scanf("%d %d %d %d %d", &F, &S, &G, &df[0], &df[1]);
df[1] = -df[1]; // Down은 minus 부호로 바꾸어 준다.
ans = bfs();
if (ans == -1) printf("use the stairs");
else printf("%d", ans);
return 0;
}
아쉬운 점
문제 자체는 어렵지 않아 쉽게 풀 수 있었다.
항상 C언어를 이용해 구현하다 보니 STL 사용이 익숙지 않았다.
처음으로 STL queue를 활용해 보았는데 너무 편했다.
공부가 필요할 것 같다. (queue, vector...)
동적으로 할당할 때 한번에 0으로 전체 초기화 하는 방법이 뭐가 있을까? (calloc 말고)
'myt-algorithm-practice > algo-1' 카테고리의 다른 글
| [Algorithm][C++] BOJ 4991 로봇 청소기 (0) | 2021.09.02 |
|---|---|
| [Algorithm][C++] BOJ 9376 탈옥 (0) | 2021.09.02 |
| [Algorithm][C++] BOJ 16236 아기 상어 (0) | 2021.08.30 |
| [Algorithm][C++] BOJ 14442 벽 부수고 이동하기 2 (0) | 2021.08.29 |
| [Algorithm][C++] BOJ 16954 움직이는 미로 탈출 (0) | 2021.08.28 |
Comments