프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 방법

문제에 주어진 조건대로 2차원 배열을 만들면 아래 그림과 같은 구조가 된다

만약 n이 3이라 할 때 주어진 과정대로 1차원 배열을 만들면 아래와 같이 된다.

1 2 3 2 2 3 3 3 3
idx = 0 idx = 1 idx = 2 idx = 3 idx = 4 idx = 5 idx = 6 idx = 7 idx= 8

 

이것의 규칙을 자세히 보면 크기가 n인 idx = i에 있는 원소의 값은 (i / n) > (i % n) ? (i / n + 1) : (i % n + 1)임을 알 수 있다.

 

1. 각각 i / n과 i % n을 담을 int형 변수 tmp1와 tmp2를 선언한다.

2. i행 i열까지의 모든 빈 칸을 i로 채우는 1차원 배열 arr가 있다고 할 때 arr[left]부터 arr[right]를 구하기 위해 answer에 left부터 right까지 i / n이 i % n보다 크다면 i / n + 1, 아니면 i % 2 + 1을 담는다.

3. right까지 반복이 끝나면 answer 리턴

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;
    int tmp1 = 0, tmp2 = 0;
    
    for(long long i = left; i <= right; i++) {    
        int tmp1 = i / n;
        int tmp2 = i % n;
        
        answer.push_back(tmp1 > tmp2 ? tmp1 + 1 : tmp2 + 1);
    }
    
    return answer;
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

할인 행사/C++  (0) 2023.01.17
연속 부분 수열 합의 개수/C++  (0) 2023.01.17
가장 큰 수/C++  (0) 2023.01.17
주식가격/C++  (0) 2023.01.16
2 x n 타일링/C++  (0) 2023.01.16

+ Recent posts