-
[프로그래머스/Level 2] 행렬 테두리 회전하기 (C++)알고리즘 문제풀이/프로그래머스 2021. 4. 29. 15:45
programmers.co.kr/learn/courses/30/lessons/77485
코딩테스트 연습 - 행렬 테두리 회전하기
6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]
programmers.co.kr
삼성 역량 테스트 기출문제였던 백준 17144번 미세먼지 안녕과 비슷한 문제였습니다.

https://programmers.co.kr/learn/courses/30/lessons/77485 입력받은 좌표중 첫번째 좌표를 tmp 변수에 저장한 후, 이를 기준으로 값을 한칸씩 계속 땡겨가며 회전 처리를 해주었습니다. 마지막 부분만 tmp를 덮어 씌어주면 됩니다. 이런 방법으로 회전 처리를 하고, 할 때마다 최소값을 갱신해가면 쉽게 문제를 해결할 수 있습니다.
#include <string> #include <vector> using namespace std; int map[101][101], num = 1; vector<int> solution(int rows, int columns, vector<vector<int>> queries) { vector<int> answer; for(int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { map[i][j] = num++; } } for(auto q : queries) { int sx = q[0] - 1, sy = q[1] - 1; int ex = q[2] - 1, ey = q[3] - 1; int tmp = map[sx][sy]; int minn = 2147000000; for(int i = sx; i < ex; i++) { map[i][sy] = map[i + 1][sy]; minn = min(minn, map[i][sy]); } for(int i = sy; i < ey; i++) { map[ex][i] = map[ex][i + 1]; minn = min(minn, map[ex][i]); } for(int i = ex; i > sx; i--) { map[i][ey] = map[i - 1][ey]; minn = min(minn, map[i][ey]); } for(int i = ey; i > sy; i--) { map[sx][i] = map[sx][i - 1]; minn = min(minn, map[sx][i]); } map[sx][sy + 1] = tmp; minn = min(minn, map[sx][sy + 1]); answer.push_back(minn); } return answer; }'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 3] 숫자 게임 (C++) (0) 2021.05.07 [프로그래머스/Level 3] 길 찾기 게임 (C++) (0) 2021.05.07 [프로그래머스/Level 1] 로또의 최고 순위와 최저 순위 (C++) (0) 2021.04.28 [프로그래머스/Level 3] 합승 택시 요금 (C++) (0) 2021.04.22 [프로그래머스/Level 2] 괄호 회전하기 (C++) (0) 2021.04.16