-
[프로그래머스/Level 2] 행렬 테두리 회전하기 (C++)알고리즘 문제풀이/프로그래머스 2021. 4. 29. 15:45
programmers.co.kr/learn/courses/30/lessons/77485
삼성 역량 테스트 기출문제였던 백준 17144번 미세먼지 안녕과 비슷한 문제였습니다.
입력받은 좌표중 첫번째 좌표를 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