[C#] 삼각 달팽이(수열 규칙)
2020. 10. 9. 15:44ㆍ[C#] 코딩테스트 문제풀이
반응형
프로그래머스 문제
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예
n result
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
내 풀이
using System;
public class Solution {
public int[] solution(int n) {
int[] answer = new int[(n*(n+1))/2]; //배열의 총크기
int[,] temp = new int[n,n]; //2차원 배열
int x = -1, y = 0;
int num = 1;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (i % 3 == 0) { //왼쪽대각선으로 진행시
x++;
} else if (i % 3 == 1) { //오른쪽으로 진행시
y++;
} else if (i % 3 == 2) { //오른쪽 대각선 진행시
x--;
y--;
}
temp[x,y] = num++;
}
}
int k = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(temp[i,j] == 0)
break;
answer[k++] = temp[i,j];
}
}
return answer;
}
}
느낀점: 오랜만에 문제를 푸니 더 어렵게 느껴졌다.
우선 문제는 수열의 규칙을 사용하는 문제였다.
나는 문제를 해결하기 위해 3가지 수열의 규칙을 찾아내였다.
첫째 왼쪽 대각선은 x좌표 1씩 증가
둘째 오른쪽으로 진행시 y좌표 1씩 증가
셋째 오른쪽 대각선으로 진행시 x,y좌표 모두 1씩 감소
즉 문제의 핵심은 계차수열을 통한 규칙을 찾아내고 그 규칙을 통해 2차원배열을 만들어 낼수 있느냐를 묻는 문제이다.
반응형
'[C#] 코딩테스트 문제풀이' 카테고리의 다른 글
[C#] 기능개발(스택 /큐) (0) | 2020.10.20 |
---|---|
[C#] 스킬트리(리스트 요소 검색) (0) | 2020.10.19 |
[C#]가장 큰수(정렬) (0) | 2020.09.14 |
[C#]큰 수 만들기 (탐욕법) (0) | 2020.09.11 |
[C#] 소수 찾기 (완전 탐색) (0) | 2020.09.11 |