코딩테스트 연습 - 삼각 달팽이 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
풀이
1. n x n 크기의 2차원 배열 triangle 생성
2. 변수 x, y, num, direction 생성: x, y = 현재 좌표 / num = 현재 채우는 수 / direction = 방향
3. 각 행마다 삼각형을 채우기 위해 2중 for 문 사용
4. direction에 따라 좌표를 변경하고, 현재 위치에 num 값을 할당
5. direction 값을 0 -> 1 -> 2 -> 0 순서로 변경
6. triangle 배열에 삼각형을 모두 채운 후, 새로운 배열 answer 생성
7. answer 배열에 triangle 배열의 값 복사
8. answer 배열 반환
class Solution {
public int[] solution(int n) {
int[][] triangle = new int[n][n];
int x = -1, y = 0, num = 1, direction = 0;
// direction: 0 - down, 1 - right, 2 - up
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (direction == 0) {
x++;
} else if (direction == 1) {
y++;
} else {
x--;
y--;
}
triangle[x][y] = num++;
}
direction = (direction + 1) % 3;
}
int[] answer = new int[num - 1];
int index = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
answer[index++] = triangle[i][j];
}
}
return answer;
}
}
'Programmers > Lv.2' 카테고리의 다른 글
[프로그래머스][Lv.2][Java] 최댓값과 최솟값 (0) | 2023.04.28 |
---|---|
[프로그래머스][Lv.2][카카오][Java] 거리두기 확인하기 (0) | 2023.04.10 |
[프로그래머스][Lv.2][Java][LinkedList] 프린터 (0) | 2023.03.17 |
[프로그래머스][Lv.2][Java][HashMap] 전화번호 목록 (0) | 2023.03.17 |
[프로그래머스][Lv.2][Java][해시] 위장 (0) | 2023.03.17 |