[c++/프로그래머스] n^2 배열 자르기

조히·2022년 12월 26일
0

PS

목록 보기
20/82

문제 링크

n^2 배열 자르기

풀이

인덱스의 값이 n의 몫과 나머지 중 큰 쪽이라는 규칙은 찾아서 주석처럼 풀었는데, 테케 2번은 메모리 초과, 15번부터는 다 틀려서 다시 풀었다.
굳이 저렇게 풀 이유가 없었음.. 규칙 다 찾고 허튼 짓 하기

  1. 일단 2차원 배열을 모두 구현하면 당연히 메모리 초과가 남 ..
  2. 그래서 범위 내로 구해야 한다. left부터 right까지 반복문으로 돌린다
    2-1. i 인덱스의 값을 구하려면 i의 행과 열을 구해야 한다.
    2-2. i의 행은 i/n, 열은 i%n이다.
  3. 구한 행과 열 중 큰 값을 찾고 1을 더해주면 값을 구할 수 있음. 이것들을 answer에 넣어주면 된다.

코드

#include <string>
#include <vector>
#include <iostream>
#include <cmath>

using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;
    
    /*int start_row = left/n; 
    int start_col = left%n; 
    int end_row = right/n; 
    int end_col = right%n;
    
    for(int i=start_col;i<n;i++) // 잘린 배열 중 맨 윗 부분
    {
        answer.push_back(max(i+1,start_row+1));
    }
    
    
    for(int i=start_row+1;i<end_row;i++) // 가운데 온전한 부분
    {
        for(int j=0;j<n;j++)
        {
            answer.push_back(max(i+1,j+1));
        }
    }
    
    if(start_row!=end_row) 
    {
        for(int i=0;i<=end_col;i++) // 맨 마지막 부분
        {
            answer.push_back(max(i+1,end_row+1));
        }
    }*/
    
    for(long long i=left;i<=right;i++)
    {
        answer.push_back(max(i/n+1, i%n+1));
    }
    
    return answer;
}
profile
Juhee Kim | Game Client Developer

0개의 댓글