티스토리 뷰
문제
https://www.acmicpc.net/problem/10834
문제요약
1. 두 개의 바퀴는 벨트로 고정된다.
2. 벨트는 두 개의 방식을 가진다. ( 0자 형태, 8자 형태)
3. 0자 형태는 두 개의 바퀴의 회전방향이 동일하고, 8자 형태는 반대이다.
4. 입력으로 M개의 벨트와 M+1개의 바퀴들의 회전수의 비 그리고 벨트의 형태가 주어진다.
5.. 출력은 M+1 바퀴의 회전 방향과 회전수를 출력한다.
풀이과정
문제가 길어서 처음에 잔뜩 쫄았다.
하지만 규칙을 알면 쉽게 풀 수 있는 문제였다.
1. 회전방향은 초기값을 시계방향으로 잡고 벨트의 형태가 8자 형태가 나오면 반대로 변환시켰다.
2. 회전수 계산은 주어진 회전수의 비를 이용하여 현재 바퀴 바로 이전의 바퀴는 몇바퀴 회전했는지 구한 후 계산하는게 핵심이다.
소스코드
#include <iostream>using namespace std;int main(){// M : 벨트의 개수// a,b :벨트로 이어진 두 바퀴의 회전수의 비// s : 벨트의 형태 (안꼬인 형태는 0,꼬인 형태는 1)// r : 회전 방향 (시계방향은 true, 반시계방향은 false), 첫 시작은 시계방향// r_num : M+1번 바퀴의 분당 회전수int M, a=1, b=1,s,r_num=1;bool r = true;cin >> M;for (int i = 0; i < M; i++){cin >> a >> b >> s;r_num = (r_num / a)*b;r = s == 1 ? !r : r; // 꼬인 형태면 방향이 반대}if (r) cout << "0 " << r_num;else cout <<"1 " << r_num;return 0;}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10163번 색종이 (0) | 2017.11.28 |
---|---|
[백준] 2839번 설탕배달 (0) | 2017.11.26 |
[백준] 10162번 전자레인지 (1) | 2017.11.24 |
[백준] 10836번 여왕벌 (0) | 2017.11.23 |
[백준] 10835번 카드게임 (0) | 2017.11.22 |