프로그래머스
프로그래머스 n^2 배열 자르기
콩순이냉장고
2021. 11. 2. 00:35
문제 URL : https://programmers.co.kr/learn/courses/30/lessons/87390
문제 접근법:
수학적으로 접근하면 바로 풀립니다.
그림을 그려보시면 아시겠지만
0,0 | 0,1 | 0,2 | 0,3 |
1,0 | 1,1 | 1,2 | 1,3 |
2,0 | 2,1 | 2,2 | 2,3 |
3,0 | 3,1 | 3,2 | 3,3 |
1 | 2 | 3 | 4 |
2 | 2 | 3 | 4 |
3 | 3 | 3 | 4 |
4 | 4 | 4 | 4 |
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |
위테이블은 좌표를 나타냈고 아래쪽테이블은 숫자를 넣었는데
규칙을 보시면아시겠지만 x,y좌표중 큰것을 기준으로 +1값이 배열안에 들어간것을 알수있습니다.
배열 arr[x][y]=max(x,y)+1 이라는 거겠죠
그렇다면 자르는것 어떻게 자르냐?
몫과 나머지를 이용하면됩니다.
예를들어 7번째 자리는 어디인지 확인하실려면
번째 자리는 7/4 의 몫은 1이고 7%4의 나머지는 3이니 1,3이라는 정확한값을
한번에 구할수있습니다. 이런식으로 코드를 짜주면 쉽게 풀수있는 문제입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<int> solution(int n, long long left, long long right) {
vector<int> answer(right - left + 1);
int idx = 0;
for (ll i = left; i <= right; i++) {
ll r = i / n;
ll mod = i % n;
answer[idx++] = max(r, mod) + 1;
}
return answer;
}
|
cs |
궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.