[프로그래머스 C++] n^2 배열 자르기
n^2 배열 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/87390
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해결전략
동적계획법, Dynamic Programming, DP
구현
첫번째 시도 코드 - 시간초과
#include <string> #include <vector> using namespace std; vector<int> solution(int n, long long left, long long right) { vector<int> result(n*n); vector<int> answer(right - left + 1); vector<vector<int>> v(n, vector<int>(n)); for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) { if (y > x) v[y][x] = y+1; else v[y][x] = x+1; } } int j = 0; for (int i = 0; i < n * n; i++) { if (i > 0 && i % n == 0) j++; result[i] = v[j][i%n]; } for (long long i = left, j = 0; i <= right; i++, j++) { // 범위가 long long 타입이므로 반복문 변수도 맞춰줌. answer[j] = result[i]; } return answer; }
두 번째 시도 - 시간초과
#include <string> #include <vector> using namespace std; vector<int> solution(int n, long long left, long long right) { vector<int> result(n*n); vector<int> answer(right - left + 1); int i = 0; int j = 0; for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++, i++) { if (y > x) result[i] = y+1; else result[i] = x+1; if (left <= i && i <= right) answer[j++] = result[i]; } } return answer; }
정답 코드
#include <string> #include <vector> using namespace std; vector<int> solution(int n, long long left, long long right) { vector<int> answer(right - left + 1); int j = 0; for (long long i = left; i <= right; i++) { // y x x 2차원 배열이라 상상하면 int y = i / n; // y(세로)값은 i/n이다. int x = i % n; // x(가로)값은 i%n이다. // answer 1차원 배열에는 left~right 사이의 값만 담아주어야 하기 때문에 // 변수 j를 0부터 증가시키며 answer[0], answer[1], answer[2],...순서로 담는다. // 문제 설정 상 시작값이 0이 아닌 1이기 때문에 +1을 해준다. if (y > x) answer[j++] = y+1; else answer[j++] = x+1; } return answer; }
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 의상 (0) | 2023.09.15 |
---|---|
[프로그래머스 C++] 행렬의 곱셈 (0) | 2023.09.13 |
[프로그래머스 C++] 피보나치 수 (0) | 2023.09.12 |
[프로그래머스 C++] [1차] 캐시 (0) | 2023.09.11 |
[프로그래머스 C++] 할인행사 (0) | 2023.09.10 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 의상
[프로그래머스 C++] 의상
2023.09.15 -
[프로그래머스 C++] 행렬의 곱셈
[프로그래머스 C++] 행렬의 곱셈
2023.09.13 -
[프로그래머스 C++] 피보나치 수
[프로그래머스 C++] 피보나치 수
2023.09.12 -
[프로그래머스 C++] [1차] 캐시
[프로그래머스 C++] [1차] 캐시
2023.09.11
댓글을 사용할 수 없습니다.