목록전체 글 (168)
HyeLog
문제 링크: https://www.acmicpc.net/problem/16935 나머지 연산들은 단순했고, 3번 연산(오른쪽으로 90도 회전)과 4번 연산(왼쪽으로 90도 회전)은 생각이 필요했다. #include #include #define A_MAX 100 using namespace std; int N, M, R, A[A_MAX][A_MAX], F, tmp[A_MAX][A_MAX]; // 가로 N, 세로 M, 연산 개수 R, 배열 A (N, M은 짝수) void func1() { int tmp_x; for (int i = 0; i < N / 2; i++) { for (int j = 0; j < M; j++) { tmp_x = A[i][j]; A[i][j] = A[N - 1 - i][j]; A[N ..

간단한 줄 알았는데 생각보다 복잡한 문제였다. 어떤 방향으로 for문을 돌릴지에 대해 좀 길게 고민했다. 이 문제는 1) 돌려야하는 사각형의 개수 (= min(N, M) / 2 )만큼 반복문을 돌리는 방법과 2) 사각형의 네 꼭짓점을 지정해서 그 범위로 반복문을 돌리는 방법 두가지로 풀이가 가능한데, 나는 2번째 방법으로 풀었다. 배열을 반시계 방향으로 돌리기 때문에, for문에서 i가 증가하는 방향은 그 방향의 반대여야한다. 사각형의 네 변을 각각 돌리는 순서도 반시계의 반대인 시계 방향으로 정했다. 즉, 가로 위 -> 세로 오른쪽 -> 가로 아래 -> 세로 왼쪽 순 (시계방향)으로 각각 for문을 돌려 총 4개의 for문을 사용했다. 처음에 tmp에 A[x4][y4]를 저장한 이유는, 이 같은 순서로..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
백준 11055번(가장 큰 증가 부분 수열) 과 유사한 다이나믹 프로그래밍(dp) 문제였다. i번까지의 수열의 최대 길이인 d[i]를 1로 초기화하고, 이전 값들과 모두 비교해서 갱신하는 방식으로 풀었다. #include #include #define MAX 1001 using namespace std; int N, A[MAX], d[MAX], answer; void dp() { int maxD = 0; for (int i = 1; i > N; for (int i = 1; i > A[i]; } dp(); cout