반응형
SMALL
2641번: 다각형그리기
모눈종이에 다각형을 그리려고 한다. 그리는 방법은 모양수열로 표시된다. 모양수열은 1과 4사이의 숫자가 연속되어 나열된 것으로 1은 오른쪽으로, 2는 위쪽으로, 3은 왼쪽으로, 4는 아래쪽으로
www.acmicpc.net
머리가 굳고, C 언어가 안 짜진다.
일부러 쉬운 문제 골라서 했는데, 왤케 머리가 뿌얘
#include <stdio.h>
int N, M;
int CORR_ARR[50 + 5];
int TEST_ARR[100 + 10][50 + 5];
int REVS_ARR[100 + 10][50 + 5];
int DIR[5] = {0, 3, 4, 1, 2};
int R;
int RS[100 + 10][50 + 5];
void init() {
R = 0;
// freopen("input.txt", "r", stdin);
scanf("%d", &N);
for (int n = 0; n < N; ++n) {
scanf("%d", &CORR_ARR[n]);
}
scanf("%d", &M);
for (int m = 0; m < M; ++m) {
for (int n = 0; n < N; ++n) {
scanf("%d", &TEST_ARR[m][n]);
REVS_ARR[m][N - (n + 1)] = DIR[TEST_ARR[m][n]];
}
}
}
void set_flag(int m) {
for (int n = 0; n < N; ++n) {
RS[R][n] = TEST_ARR[m][n];
}
R++;
}
void compare(int m) {
int flag = 1;
for (int n = 0; n < N; ++n) {
if (CORR_ARR[0] == TEST_ARR[m][n]) {
int idx = n;
flag = 1;
for (int p = idx; p < N; ++p) {
if (CORR_ARR[p - idx] != TEST_ARR[m][p]) {
flag = 0;
break;
}
}
for (int o = 0; o < idx; ++o) {
if (CORR_ARR[N - idx + o] != TEST_ARR[m][o]) {
flag = 0;
break;
}
}
if (flag) {
set_flag(m);
break;
}
}
}
}
void compare_rev(int m) {
int flag = 1;
for (int n = 0; n < N; ++n) {
if (CORR_ARR[0] == REVS_ARR[m][n]) {
int idx = n;
flag = 1;
for (int p = idx; p < N; ++p) {
if (CORR_ARR[p - idx] != REVS_ARR[m][p]) {
flag = 0;
break;
}
}
for (int o = 0; o < idx; ++o) {
if (CORR_ARR[N - idx + o] != REVS_ARR[m][o]) {
flag = 0;
break;
}
}
if (flag) {
set_flag(m);
break;
}
}
}
}
void print() {
printf("%d\n", R);
for (int r = 0; r < R; ++r) {
for (int n = 0; n < N; ++n) {
printf("%d ", RS[r][n]);
}
printf("\n");
}
}
int main(void) {
init();
for (int m = 0; m < M; ++m) {
compare(m);
compare_rev(m);
}
print();
return 0;
}
삼성식 주입 교육이 도움이 된 거라는 걸 깨달았다.
그 때가 좋았지
반응형
LIST
'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
10867 - 중복 빼고 정렬하기 (0) | 2023.12.19 |
---|---|
10808 - 알파벳 갯수 (0) | 2023.12.18 |
시간 복잡도 느린 정렬 모음 - python (0) | 2023.06.16 |
2243 - 사탕상자 (0) | 2021.10.31 |
17404 - RGB 거리 2 (2) | 2021.10.25 |