반응형
https://www.codetree.ai/training-field/frequent-problems/problems/rounding-eight-angle
돌아가는 팔각의자 문제 풀이는 BOJ 14891 : 톱니바퀴와 같다.
#include <stdio.h>
#define MAX (100 + 20)
int T;
int wheel[5][10];
int N;
int number[MAX];
int direct[MAX];
int list[6];
void input()
{
for (int number = 1; number <= 4; number++)
for (int index = 1; index <= 8; index++)
scanf("%1d", &wheel[number][index]);
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d %d", &number[i], &direct[i]);
}
void rotate(int number, int dir)
{
int temp;
if (dir == -1)
{
temp = wheel[number][1];
for (int index = 1; index <= 7; index++)
{
wheel[number][index] = wheel[number][index + 1];
}
wheel[number][8] = temp;
}
else
{
temp = wheel[number][8];
for (int index = 8; index >= 2; index--)
{
wheel[number][index] = wheel[number][index - 1];
}
wheel[number][1] = temp;
}
}
int check(int compare, int number)
{
if (compare < 1 || compare > 4) return 0;
if (number < 1 || number > 4) return 0;
if (compare < number && wheel[number][7] != wheel[compare][3]) return 1;
if (compare > number && wheel[number][3] != wheel[compare][7]) return 1;
return 0;
}
void DFS(int number, int dir)
{
/* number를 기준으로 왼쪽 바퀴가 움직여야 하는지 체크 */
if (check(number - 1, number) == 1 && list[number - 1] == 0)
{
list[number - 1] = dir * (-1);
DFS(number - 1, dir * (-1));
}
/* number를 기준으로 오른쪽 바퀴가 움직여야 하는지 체크 */
if (check(number + 1, number) == 1 && list[number + 1] == 0)
{
list[number + 1] = dir * (-1);
DFS(number + 1, dir * (-1));
}
}
int calculate()
{
int sum, mul;
sum = 0;
mul = 1;
for (int i = 1; i <= 4; i++)
{
sum += mul * wheel[i][1];
mul *= 2;
}
return sum;
}
int main(void)
{
// scanf("%d", &T);
T = 1;
for (int tc = 1; tc <= T; tc++)
{
int ans;
input();
for (int i = 0; i < N; i++)
{
list[number[i]] = direct[i];
DFS(number[i], direct[i]);
for (int k = 1; k <= 4; k++)
if (list[k] != 0) rotate(k, list[k]);
for (int k = 1; k <= 4; k++) list[k] = 0;
}
ans = calculate();
printf("%d\n", ans);
}
return 0;
}
반응형
'알고리즘 > [ADV] 삼성 SW 역량 테스트 A형' 카테고리의 다른 글
[코드트리] 이상한 체스 (삼성 SW 역량테스트 2018 상반기 오전 1번) (0) | 2024.06.07 |
---|---|
[코드트리] 연산자 배치하기 (삼성 SW 역량테스트 2017 하반기 오후 2번) (1) | 2024.06.07 |
[코드트리] 보도블럭 (삼성 SW 역량테스트 2017 하반기 오전 2번) (1) | 2024.06.07 |
[코드트리] 조삼모사 (삼성 SW 역량테스트 2017 하반기 오전 1번) (0) | 2024.06.07 |
[코드트리] 방화벽 설치하기 (삼성 SW 역량테스트 2017 상반기 오후 2번) (0) | 2024.06.07 |
댓글