728x90
문제 설명
아이디어
구현 코드
배열에 규칙이 보였기 때문에
n^2 만큼의 배열을 만들어서 일일이 한 행씩 추가하는 건 비효율적일 것 같다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, long long left, long long right) {
vector<int> answer;
for (long long i = left; i <= right; i++) {
long long r = i / n;
if (i >= r * n && i < r * (n+1))
answer. push_back(r + 1);
else
answer.push_back(i + 1 - r*n);
}
return answer;
}
아이디어에서 말한 예외를 if문으로 처리
주의 ) row를 표현한 r을 int로 하면 x
신경쓰이는 점이 예외 개수가 r개여서 더 간단하게 할 수 있을 것 같고,
else에서 추가하는 값의 수식이 안 예쁘다
개선한 코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, long long left, long long right) {
vector<int> answer;
for (long long i = left; i <= right; i++) {
long long row = i / n;
long long col = i % n;
if (col < row)
answer.push_back(row + 1);
else
answer.push_back(col + 1);
}
return answer;
}
행별로 열별로 규칙이 있는 것을 이용해서 정리했다.
마음에 든다
728x90
'Programming > CodingTest' 카테고리의 다른 글
[프로그래머스] [1차] 캐시 (1) | 2024.03.17 |
---|---|
[프로그래머스] 의상 (해시) (0) | 2024.03.15 |
[프로그래머스] 완주하지 못한 선수 (0) | 2024.03.08 |
[프로그래머스] 폰켓몬 (0) | 2024.03.07 |
[프로그래머스] 기능개발 (1) | 2024.03.07 |