-
[BOJ]백준 15804번: 저거 못 타면 지각이야!!Problem Solving/BOJ(백준) 2019. 4. 25. 00:45
트럭문제는 정직하게 큐를 써서 풀었는데, 맞은 사람들을 보니까 굳이 안써도 풀 수 있구나 싶었다
메모리 계산이나 시간 계산같은 것은 아직은 할 줄 모르지만.. 나는 극한의 효율충이기 때문에
원리 자체는 큐이지만 했지만 배열로 풀었다
항상 문제푸는 스킬?이 부족하다는 생각을 하는데 현재까지는 그냥 알고리즘을 생각하고 그걸 수도코드로 만들어서 코드화를 시키고 있다
그래서
//현재 정차되어 있는 버스들의 시간을 1씩 감소시킨다
//정차할 수 있다면(빈자리가 있다면) 다음 버스를 정차시킨다
크게 두 단계에서, 각각의 과정을 세분화해서 알고리즘을 코드로 구현한게 끝이다
변수 cn = 현재 정차중인 버스 수
ct = 현재 단위 시간
fin = 정차를 마치고 빠져나간 버스 수
index = 다음에 들어갈 버스의 번호
fin~fin+cn까지가 현재 정류장에 있는 버스들의 번호이다
#include <cstdio> struct bus { int t, p, c; }; int n, m, cn, ct, fin, index; bus b[101]; int main() { scanf("%d%d", &n, &m); for (int i = 0; i < m; i++)scanf("%d%d", &b[i].t, &b[i].p); while (index < m) { ct++; for (int i = fin; i < fin + cn; i++) { //현재 정차하고 있는 버스들의 타이머 감소 b[i].p--; if (b[fin].p <=0 && b[i].p <= 0) { fin++; cn--; } //뒤에 버스들의 정차 시간이 끝나도 첫번째 정차중인 //버스의 타이머가 끝날때까지 대기 후 변수 조정 } while (cn < n && ct >= b[index].t) { //버스 수가 최대 정차 수보다 작고 현재 시간이 다음 버스가 들어올 수 있으면 if (cn && b[fin + cn - 1].c == n)break; //직전 버스가 정류소의 맨 끝에 있으면 못들감 if (!cn) b[index].c = 1; //정류소에 버스가 없으면 1번위치로 else b[index].c = b[fin + cn - 1].c + 1; //버스가 있다면 그 버스의 바로 뒤로 index++; cn++; } } printf("%d", b[m - 1].c); return 0; }
'Problem Solving > BOJ(백준)' 카테고리의 다른 글
[BOJ]백준 17144번: 미세먼지 안녕! (440) 2019.06.23 [BOJ]백준 11559번: Puyo Puyo (424) 2019.05.17 [BOJ]백준 16917번 : 양념 반 후라이드 반 (398) 2019.04.26 [BOJ]백준 16923번: 다음 다양한 단어 (408) 2019.04.26 [BOJ]백준 11718번: 그대로 출력하기 (427) 2019.02.06