Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 달인막창
- preemption #
- 깡돼후
- PytestPluginManager
- 겨울 부산
- Value too long for column
- 코루틴 컨텍스트
- 자원부족
- JanusWebRTCServer
- pytest
- 개성국밥
- table not found
- vfr video
- JanusGateway
- taint
- python
- VARCHAR (1)
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- terminal
- 코루틴 빌더
- Spring Batch
- 오블완
- k8s #kubernetes #쿠버네티스
- JanusWebRTCGateway
- kotlin
- JanusWebRTC
- 티스토리챌린지
- tolerated
- mp4fpsmod
- PersistenceContext
Archives
너와 나의 스토리
(BOJ) 14891 톱니바퀴 본문
반응형
문제: https://www.acmicpc.net/problem/14891
문제 설명:
N극 = 0 / S극 =1
방향 1 = 시계방향으로 회전 / 방향 -1 = 반시계방향으로 회전
4개의 톱니바퀴 중 하나를 돌릴 때, 돌리기 직전의 톱니와 맞닿아 있던 톱니의 극이 다르면 반대로 회전시킨다.
맞닿은 톱니들의 극이 같아질 때까지 돌리기 X, 한번만 돌림
문제 풀이:
톱니가 돌아가는 것은 왼쪽을 가리키는 포인터, 오른쪽을 가리키는 포인터를 만들어서 회전 방향에 따라 +1, -1 해주면 됨 -> 사실 포인터 하나만 있어도 충분한데 헷갈리니까 그냥 두 개 만들었다 ㅎㅎ
포인터가 7일 때, +1해주면 범위를 넘어가므로 %8 해줘야한다.
*주의* 반대로 0일 때, -1하는 경우 ( ex) (0-1)%8 ) 하면 -1이 되므로 틀림 -> (0-1+8)%8 해줘야 함
-> 이거 때문에 계속 맞왜틀 ㅠㅠ 하다가 겨우 찾음
문제만 잘 읽고, 기본적인 실수만 안하면 쉬운 문제인 것 같다.
소스 코드:
typedef pair<int, int> P;
int n, res, score[4] = {1,2,4,8};
char arr[4][8];
vector<P> v;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i < 4; i++) v.push_back({ 6,2 });
cin >> n;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
a--;
int l = v[a].first, r = v[a].second;
v[a] = make_pair((l - b+8) % 8, (r - b+8) % 8);
int d = b;
for (int i = a - 1; i >= 0; i--) {
if (arr[i][v[i].second] == arr[i+1][l]) break;
d *= -1;
l = v[i].first;
v[i] = make_pair((v[i].first - d + 8) % 8, (v[i].second - d + 8) % 8);
}
d = b;
for (int i = a + 1; i < 4; i++) {
if (arr[i][v[i].first] ==arr[i-1][r]) break;
d *= -1;
r = v[i].second;
v[i] = make_pair((v[i].first - d + 8) % 8, (v[i].second - d + 8) % 8);
}
}
for (int i = 0; i < 4; i++) {
if (arr[i][(v[i].first + 2)%8] == '1') res += score[i];
}
cout << res << '\n';
return 0;
}
반응형
'Algorithm > 기타' 카테고리의 다른 글
(BOJ) 12782 비트 우정지수 (0) | 2019.05.25 |
---|---|
(BOJ) 17209 새내기와 헌내기 (0) | 2019.05.25 |
(BOJ) 1931 회의실배정 (0) | 2019.05.01 |
(BOJ) 17070 파이프 옮기기 1 (0) | 2019.03.20 |
(BOJ) 11055 가장 큰 증가 부분 수열 (0) | 2019.03.13 |
Comments