//https://www.acmicpc.net/problem/14891 #include <iostream> |
using namespace std; |
int main() |
{ |
char gear_input[4][8]; |
bool gear[4][8]; |
for(int i=0; i<4; i++) cin >> gear_input[i]; |
for(int i=0; i<4; i++) for(int j=0; j<8; j++) gear[i][j]=gear_input[i][j]-'0'; |
int K; |
cin >> K; |
while(K-->0) |
{ |
int rot_gear, dir; |
cin >> rot_gear >> dir; |
bool rot_chk[4][2]; |
for(int i=0; i<4; i++) rot_chk[i][0]=rot_chk[i][1]=0; |
rot_chk[rot_gear-1][0]=1; |
if(dir==-1) rot_chk[rot_gear-1][1]=0; |
else rot_chk[rot_gear-1][1]=1; |
//rot_chk[기어][0]=회전하는지 안하는지 |
//rot_chk[기어][1]=회전방향 1:시계, 0:반시계 |
for(int i=rot_gear-1; i<4; i++) // 선택 기어의 오른쪽 기어 |
{ |
if (gear[i][2]==gear[i+1][6]) |
break; |
else |
{ |
rot_chk[i+1][0]=1; |
if(rot_chk[i][1]==1) rot_chk[i+1][1]=0; |
else rot_chk[i+1][1]=1; |
} |
} |
for(int i=rot_gear-1; i>=0; i--) // 선택 기어의 왼쪽 기어 제어 |
if (gear[i][6]==gear[i-1][2]) |
break; |
else |
{ |
rot_chk[i-1][0]=1; |
if(rot_chk[i][1]==1) rot_chk[i-1][1]=0; |
else rot_chk[i-1][1]=1; |
} |
for(int i=0; i<4; i++) |
{ |
if(rot_chk[i][0]) |
{ |
if(rot_chk[i][1])//시계 방향 회전 |
{ |
int tmp=gear[i][7]; |
for(int j=6; j>=0; j--) |
gear[i][j+1]=gear[i][j]; |
gear[i][0]=tmp; |
} |
else // 반시계 방향 회전 |
{ |
int tmp=gear[i][0]; |
for(int j=1; j<=7; j++) |
gear[i][j-1]=gear[i][j]; |
gear[i][7]=tmp; |
} |
} |
} |
} |
int score=0; |
if(gear[0][0]) score +=1; |
if(gear[1][0]) score +=2; |
if(gear[2][0]) score +=4; |
if(gear[3][0]) score +=8; |
cout << score; |
} |
마지막 score 구하는 부분은 2^i 를 더하는 for 문으로도 할 수 있을 것 같음
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
171128_1495_기타리스트 (0) | 2017.11.28 |
---|---|
171128_1495_기타리스트 (큐 이용) (0) | 2017.11.28 |
171127_1476_날짜 계산 (0) | 2017.11.27 |
171127_4344_평균은 넘겠지 (0) | 2017.11.27 |
171127_2743_단어 길이 재기 (0) | 2017.11.27 |