본문 바로가기

알고리즘문제풀이

[백준 14891]톱니바퀴

반응형


 문제는 요기 -> https://www.acmicpc.net/problem/14891


처음에 짤때는 너무 지저분하게 짜서 다른사람 소스보면서  정리 했당..


시뮬레이션 문제이다 

#include<iostream>




using namespace std;




char chain[5][15];


int turnchk[5], result, K, num, dir;




void turn(int n, int d)


{


char copy[10];


for (int i = 1; i <= 8; i++)


{


copy[i] = chain[n][i];


}


if (d == 1) //시계


{


chain[n][1] = copy[8];


for (int i = 2; i <= 8; i++)


{


chain[n][i] = copy[i - 1];


}


}


else //반시계


{


chain[n][8] = copy[1];


for (int i = 1; i <= 7; i++)


{


chain[n][i] = copy[i + 1];


}


}




}




void func(int n, int d)


{


int left, right;


left = n;


right = n;


turnchk[n] = d;




while (right != 4) //오른쪽


{


if (chain[right][3] != chain[right + 1][7])


{


turnchk[right + 1] = turnchk[right] * -1;


right++;


}


else


break;


}


while (left != 1)


{


if (chain[left][7] != chain[left - 1][3])


{


turnchk[left - 1] = turnchk[left] * -1;


left--;


}


else


break;


}


}


int main()


{


for (int i = 1; i <= 4; i++)


{


for (int j = 1; j <= 8; j++) {


cin >> chain[i][j];


}


}


cin >> K;


for (int i = 0; i < K; i++)


{


for (int j = 1; j <= 4; j++)


{


turnchk[j] = 0;


}


cin >> num >> dir;


func(num, dir);


for (int j = 1; j <= 4; j++)


{


if (turnchk[j] != 0)


{


turn(j, turnchk[j]);


}


}


}


for (int i = 1; i <= 4; i++)


{


if (i == 1 && chain[1][1] == '1')


{


result += 1;


}


else if (i == 2 && chain[2][1] == '1')


{


result += 2;


}


else if (i == 3 && chain[3][1] == '1')


{


result += 4;


}


else if (i == 4 && chain[4][1] == '1')


{


result += 8;


}


}



cout << result << endl;


}



반응형

'알고리즘문제풀이' 카테고리의 다른 글

[백준14502]연구소  (0) 2019.02.12
[백준 2151]거울설치  (0) 2019.02.12
[백준14627]파닭파닭  (0) 2018.03.02
[백준 14890]경사로  (0) 2017.12.05
[백준 14889]스타트와 링크  (0) 2017.11.30