[프로그래머스] n^2 배열 자르기 - LEVEL2

Doorbals·2022년 12월 31일
0

프로그래머스

목록 보기
3/10

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/87390


✍️ 문제 풀이

해당 문제는 문제에 나와있는 애니메이션처럼 직접 2차원 배열을 만든 뒤 이를 분리해 1차원 배열로 만들어서 풀게 되면 시간 초과로 인해 통과할 수 없었다. 때문에 규칙을 찾아 각 칸에 올 숫자를 찾아내야 했다.

1) 위와 같이 각 칸에 대해 인덱스를 가지고 있는 3 * 3의 행렬이 있다고 할 때,
2번 칸의 좌표는 다음과 같다.
y좌표 : 2 / 3 = 0 x좌표 : 2 % 3 = 2 = (0, 2)

즉, n * n 행렬에서 m번 칸의 좌표는 다음과 같다.
y좌표 : m / n
x좌표 : m % n

2) 이제 좌표 값을 알았다면 해당 칸에 올 값을 알아야 하는데, 이는 해당 칸의 좌표 값 중 더 큰 값 + 1이 오게 된다. 2번 칸의 좌표는 (0, 2) 이고, x 좌표의 값인 2가 더 크기 때문에 2번 칸에는 2 + 1인 3이 오게 된다. 즉, 해당 칸에 올 값은 max(y, x) + 1이 되는 것이다.


🖥️ 풀이 코드

#include <bits/stdc++.h>

using namespace std;

vector<int> solution(int n, long long left, long long right)
{
    vector<int> result;
    for (long long i = left; i <= right; i++) // i : 칸의 인덱스
    {
        long long y = i / n;	// y : 해당 칸 y 좌표
        long long x = i % n;	// x : 해당 칸 x 좌표
        result.push_back(max(y, x) + 1);
    }
    return result;	// 2번 칸 ~ 5번 칸에 오는 값들의 배열
}
profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글