백준의 주사위게임(5566) 문제이다.
( 문제 바로가기 )
[ 문제풀이 ]
1) 이 문제는 시뮬레이션 문제이다. 문제에서 제시하는 조건에 알맞게 구현을 해주면 어렵지 않게 해결할 수 있는 문제이다.
문제의 조건을 다시한번 해보자면..
" 총 N칸이 있는 보드에서, 주사위를 굴려 나온 수 만큼 이동하고, 이동한 칸에 쓰여 있는 지시만큼 이동한다. "
이 부분만 제대로 구현을 해주면 된다.
2) 본인은 입력으로 주어지는 주사위를 던져서 나온 수들을 Vector(vector<int> V)에 저장해 주었다.
그리고 현재의 위치를 나타내는 int형 변수(int Cur) 과 주사위를 던진 횟수를 나타내는 int형 변수(int Cnt) 2개를 이용해서
구현하였다.
각 변수들의 변화를 말로 풀어서 설명하면
"현재의 위치 = 현재의 위치 + 주사위를 던져서 나온 수 + 도착한 칸에 적혀있는 수" 가 된다.
이 과정을 한번 할 때마다 주사위를 던진 횟수도 ++ 된다.
말로 길게 설명이 필요없는 문제인 것 같다.
[ 소스코드 ]
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 58 59 | #include<iostream> #include<vector> #define endl "\n" #define MAX 1000 using namespace std; int N, M; int MAP[MAX]; vector<int> V; void Input() { cin >> N >> M; for (int i = 0; i < N; i++) { cin >> MAP[i]; } for (int j = 0; j < M; j++) { int a; cin >> a; V.push_back(a); } } void Solution() { int Cur = 0; int Cnt = 0; for (int i = 0; i < V.size(); i++) { int Cmd = V[i]; Cur = Cur + Cmd; Cur = Cur + MAP[Cur]; Cnt++; if (Cur >= N) break; } cout << Cnt << endl; } void Solve() { Input(); Solution(); } int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen("Input.txt", "r", stdin); Solve(); return 0; } | cs |
'[ BOJ Code ] > # BOJ -' 카테고리의 다른 글
[ 백준 1699 ] 제곱수의 합 (C++) (0) | 2019.01.13 |
---|---|
[ 백준 1476 ] 날짜계산 (C++) (0) | 2019.01.13 |
[ 백준 11048 ] 이동하기 (C++) (1) | 2019.01.12 |
[ 백준 2309 ] 일곱 난쟁이 (C++) (0) | 2019.01.11 |
[ 백준 1547 ] 공 (C++) (0) | 2019.01.11 |