기술 블로그

1173번 운동 본문

알고리즘 문제/BOJ

1173번 운동

parkit 2019. 8. 20. 21:45
728x90
반응형

https://www.acmicpc.net/problem/1173



2가지 방법이 있다.  시뮬레이션, BFS



[시뮬레이션]

운동은 맥박을 고려해야한다.(M을 초과하면 안 됨) 

그러나 휴식은 무조건 가능하므로(M-R < m 이더라도, m으로 무조건 가능.)

m + T > M의 경우만 고려하면 된다.


[BFS]

시간이 중복되지 않게 방문 처리한다.

물론 BFS인 경우 배열의 범위를 초과하면 안 된다.

문제에서는 통과가 된다.




시뮬레이션

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
29
#include <bits/stdc++.h>
 
using namespace std;
 
int N, m, M, T, R, t, ec, h;
/*
t : 시간, ec : 운동 횟수, h, 맥박
*/
 
int main(void)
{
    scanf("%d %d %d %d %d"&N, &m, &M, &T, &R);
 
    h = m;
 
    if (m + T > M) {
        printf("-1\n");
        return 0;
    }
 
    while (ec < N) {
        if (h + T <= M) h += T, ++ec, ++t;    
        else h = h - R < m ? m : h - R, ++t;    
    }
 
    printf("%d\n", t);
 
    return 0;
}
cs







BFS


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <bits/stdc++.h>
 
using namespace std;
 
typedef struct info
{
    int t, h, ec; // 시간, 맥박, 운동 횟수
}info;
 
int N, m, M, T, R;
 
bool visit[200000];
 
int bfs()
{
    if (m + T > M) return -1;
 
    int ret = 0;
 
    queue<info> q;
 
    q.push({ 0, m, 0 });
 
    while (!q.empty())
    {
        int t = q.front().t; // 시간
        int h = q.front().h; // 맥박
        int ec = q.front().ec; // 운동 횟수
 
        if (N <= ec) return t;
 
        q.pop();
 
        if (visit[t + 1]) continue;
 
        visit[t + 1= true;
 
        if (h + T <= M) q.push({ t + 1, h + T, ec + 1 });
 
        int bt = h - R < m ? m : h - R;
 
        q.push({ t + 1, bt, ec });
    }
 
    return -1;
}
 
int main(void)
{
    int t = 0;
 
    scanf("%d %d %d %d %d"&N, &m, &M, &T, &R);
 
    printf("%d\n", bfs());
 
    return 0;
}
cs





















728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

14890번 경사로  (0) 2019.08.26
2792번 보석 상자  (0) 2019.08.21
17250번 은하철도  (0) 2019.08.19
17352번 여러분의 다리가 되어 드리겠습니다!  (0) 2019.08.19
17386번 선분 교차 1, 17387번 선분 교차 2  (0) 2019.08.17