목록백준 (3)
슈뢰딩거의 고등어
https://www.acmicpc.net/problem/17406 17406번: 배열 돌리기 4 크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 www.acmicpc.net 순열을 구해주는 것은 어렵지 않았지만 회전을 해주는 과정에서 헤매었다. 시계방향으로 한 칸씩 이동시키는 회전 함수 void turn_box(TURN cmd){ int sy = cmd.r - cmd.s; int sx = cmd.c - cmd.s; int ey = cmd.r + cmd.s; int ex = cmd.c + cmd.s; // 사각형을 밖에서부터 점점 좁혀가면..
https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 분할 정복 문제이다. 각 블록에 번호를 매기는 식으로 단순 구현을 하려고 했지만, 시간 초과가 걸려서 분할정복 방법을 사용했다. 분할정복은 큰 문제를 쪼개 계산하는 방법을 말한다. DP (동적프로그래밍) 과 비교가 자주되고, 둘의 차이는 DP 는 식의 결과를 저장해놓고 반복해서 사용하는 방식으로 각 식은 한번씩만 계산이 된다. 하지만 분할 정복은 매번 식의 결과가 동일할 것이라는 보장이 ..
https://www.acmicpc.net/problem/23288 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net #include #include using namespace std; int n, m, t; vector board; void turn(int no, int dir) { if(dir == 0) { // clockwise int tmp = board[no][m-1]; for(int i=m-2; i>=0; i--){ board[no][i+1] = board[no][i]; } boar..