반응형
A형 필수 알고리즘을 체계적으로 배우고 싶다면? (인프런 바로가기)
풀이는 BOJ 14891 : 톱니바퀴 (삼성 SW TEST A형)를 참고하자.
input 순서가 바뀌었고, 출력 방식만 다르다.
#include <stdio.h>
#define MAX (100 + 20)
int T;
int wheel[5][10];
int list[6];
int number[MAX];
int direct[MAX];
int N;
void input()
{
scanf("%d", &N);
for (int number = 1; number <= 4; number++)
{
for (int index = 1; index <= 8; index++)
{
scanf("%d", &wheel[number][index]);
}
}
for (int i = 0; i < N; i++)
scanf("%d %d", &number[i], &direct[i]);
return;
}
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;
}
return;
}
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));
}
return;
}
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);
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 %d\n", tc, ans);
}
return 0;
}
반응형
'알고리즘 > [ADV] 삼성 SW Expert Academy A형' 카테고리의 다른 글
SWEA 2382 : 미생물 격리 (모의 SW 역량테스트) (1) | 2021.05.09 |
---|---|
SWEA 2383 : 점심 식사시간 (모의 SW 역량테스트) (0) | 2021.05.07 |
SWEA 4014 : 활주로 건설 (모의 SW 역량테스트) (0) | 2021.05.02 |
SWEA 5644 : 무선 충전 (모의 SW 역량테스트) (0) | 2021.04.30 |
SWEA 5648 : 원자 소멸 시뮬레이션 (모의 SW 역량테스트) (0) | 2021.04.26 |
댓글