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