728x90
반응형
문제
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요
제한사항
1 <= n <= 30
입출력 예
정답 해설
n * n 의 숫자에 해당하는 값의 위치부터 시작해(n이 4인 경우 num = 16) num을 감소시키면서 나선형방향으로 회전해 배열을 채우는 방식으로 구현
#include <string>
#include <vector>
using namespace std;
static void fill_dir(int &op, bool dir)
{
dir == true ? op++ : op--;
}
vector<vector<int>> solution(int n) {
vector<vector<int>> answer(n, vector<int>(n, 0));
bool c_dir, r_dir, dir;
int r, c;
int num = n*n, ccnt = 1;
r = c = (n / 2);
r_dir = (num % 2 == 0) ? true : false;
r = (r_dir == true) ? r - 1 : r;
c_dir = !r_dir;
while(num != 0) {
dir = r_dir;
for(int k = 0; k < 2; k++) {
for(int i = 0; i < ccnt; i++) {
answer[c][r] = num--;
if(k == 0) {
fill_dir(r, dir);
}
else {
fill_dir(c, dir);
}
if(num == 0) {
ccnt = 0;
}
}
dir = c_dir;
}
ccnt++;
c_dir = !c_dir;
r_dir = !r_dir;
}
return answer;
}
프로그래머스 코테에서 나름 높게 나온 점수의 코드다.
- 끝 -
728x90
반응형
'Programming language > 코딩테스트' 카테고리의 다른 글
코딩테스트-콜라문제 (0) | 2024.08.15 |
---|---|
코딩테스트-코드처리하기 (0) | 2024.06.23 |
코딩테스트-숫자 문자열과 영단어 (0) | 2022.10.26 |
코딩테스트 - 3진법 뒤집기 (0) | 2022.10.12 |
코딩테스트-피보나치 수 (0) | 2022.10.12 |