Notice
Recent Posts
Recent Comments
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
- 시간 복잡도
- Stack 이란
- 5397
- c#
- qorwns
- 해시구현
- heap
- 백준 2447
- 자료구조
- 해시 구현
- 백준 1158
- 백준 17471
- 1764
- 스택의 특징
- 백준 1406
- ㅣ풀이
- 풀이
- 백준 17822
- AVL 시간 복잡도
- 백준 17779
- 백준 5397
- 원판 돌리기
- 구현
- 조세퍼스 순열
- 백준
- C/C++ 구현
- 게리멘더링2
- 버킷 정렬
- 별 찍기 10
- dfs
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 14891] 톱니바퀴 본문
분류
구현, 백트래킹
요구사항
제일 마지막 입력에서의 톱니 바퀴 구하기
풀이
문제의 흐름은
입력 -> 톱니 돌리기 -> 양 방향 확인하기 -> 정답 출력
입력
deque를 사용해서 시계 방향, 반시계 방향으로 돌릴 수 있도록 한다
톱니 돌리기
deque를 원형 큐로 생각해사 2번재, 6번째 위치를 좌, 우로 설정하여 양 옆과 비교한다
양 방향 확인하기
현재 톱니 바퀴 옆이 존재하는지와 다른 극성인지 확인한다
정답 출력
각 deque의 0번째 위치 값 확인
#include <string>
#include <vector>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <deque>
using namespace std;
/*
10101111
01111101
11001110
00000010
2
3 -1
1 1
*/
int n;
deque<int> q[5];
int visit[5];
//dir
void rotate(int num, int dir){
if(dir==1){
int temp=q[num].back();
q[num].pop_back();
q[num].push_front(temp);
}
else if(dir==-1){
int temp=q[num].front();
q[num].pop_front();
q[num].push_back(temp);
}
}
void solve(int num, int dir){
visit[num]=1;
int nowleft = q[num][6];
int nowright = q[num][2];
rotate(num,dir);
if( num -1 >=0 && visit[num-1] == 0 ){
int leftright = q[num-1][2];
if(leftright != nowleft){
solve(num-1,-dir);
}
}
if( num +1 <=3 && visit[num+1] == 0 ){
int rightleft = q[num+1][6];
if(rightleft != nowright){
solve(num+1,-dir);
}
}
}
int main(){
for(int i=0 ; i <4 ; i++){
for(int j=0 ; j <8 ; j++){
char x;
scanf(" %c",&x);
if(x=='1'){
q[i].push_back(1);
}
else{
q[i].push_back(0);
}
}
}
scanf("%d",&n);
for(int i=0 ; i < n ; i++){
memset(visit,0,sizeof(visit));
int x,y;
scanf("%d%d",&x,&y);
solve(x-1,y);
}
int ans=0;
int cnt=1;
for(int i=0 ; i <4 ; i++){
if(q[i][0] ==1){
ans+=cnt;
}
cnt*=2;
}
cout<<ans<<endl;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 14923] 미로 탈출 (0) | 2020.05.27 |
---|---|
[백준 17090] 미로 탈출하기 (0) | 2020.05.27 |
[백준 1780] 종이의 개수 (0) | 2020.05.26 |
[백준 18808] 스티커 붙이기 (0) | 2020.05.25 |
[백준 3568] iSharp (0) | 2020.05.18 |
Comments