728x90
https://www.acmicpc.net/problem/1592
1592번: 영식이와 친구들
예제 1의 경우 일단 1번이 공을 잡는다. 1번은 공을 한 번 잡았기 때문에, 공을 3번에게 던진다. 3번은 공을 한 번 잡았기 때문에, 공을 5번에게 던진다. 5번은 2번에게 던지고, 2번은 4번에게 던진다
www.acmicpc.net
요즘 문제를 안 풀었더니 하나도 모르겠다.. 이것도 겨우 풀었어.. 안돼~~
우선, 이 문제는 문제 해결 순서를 올바르게 정하고, 조건에 맞는 회전을 진행해주면 된다. 이것만 해도 충분히 쉽게 구현 가능하다..
#include <iostream>
using namespace std;
int n, m, l;
int person[52];
void solution(){
int answer = 0;
int ball = 1;
person[1] = 1; //1번 사람이 먼저 공을 받는다.
while(person[ball] != m){
answer++;
if(person[ball] % 2 == 0){ //공을 받은 횟수가 짝수라면
ball = (n+(ball-l))%n;
}else{ //공을 받은 횟수가 홀수라면
ball = (ball+l)%n;
}
person[ball]++;
}
cout << answer << '\n';
}
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m >> l;
solution();
return 0;
}
💡 외우기
- 시계방향/우측(R) 회전
index = (curr - l) % n;
//index = 이동할 인덱스
//curr = 현재 인덱스
//l = 이동 크기
//n = 배열 길이
- 반시계방향/좌측(L) 회전
index = (n + (curr - l)) % n;
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 14470번: 전자레인지 (0) | 2022.04.22 |
---|---|
[백준/c++] 10804번: 카드 역배치 (0) | 2022.04.22 |
[백준/c++] 9465번: 스티커 (0) | 2022.03.10 |
[백준/c++] 1309번: 동물원 (0) | 2022.03.10 |
[백준/c++] 2156번: 포도주 시식 (0) | 2022.03.07 |