문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
입출력 예시
풀이
구현 문제라고 생각하여 규칙을 찾는데 n의 수만큼 방향이 변경되는 것을 확인할 수 있었습니다.
또한, 방향이 바뀔 때마다 n부터 -1씩 줄어드는 것을 찾았습니다.
먼저, 2차원 정수형 배열로 칸을 채워넣는 방식을 선택하여 2중 for문으로 크게 n만큼 반복하고 ratate부터 n까지 반복문을 돌렸습니다.
방향은 아래, 오른쪽, 위쪽 순서로 돌며 방향에 맞게 2차원 배열에 알맞게 들어갈 수 있도록 x, y를 변경시키고 number를 +1씩 증가시켜 넣었습니다.
마지막으로 2차원 배열의 0을 제외하여 1차원 배열로 변경하고 return 해주었습니다.
코드
import java.util.*;
class Solution {
public int[] solution(int n) {
int sum = 0;
for(int i = 1; i <= n; i++) {
sum += i;
}
int[][] snail = new int[n][n];
int number = 1;
int x = -1;
int y = 0;
for(int rotate = 0; rotate < n; rotate++) {
for(int j = rotate; j < n; j++) {
// 아래
if(rotate % 3 == 0) {
snail[++x][y] = number++;
}
// 오른쪽
else if(rotate % 3 == 1) {
snail[x][++y] = number++;
}
// 위쪽
else if(rotate % 3 == 2) {
snail[--x][--y] = number++;
}
}
}
int[] answer = new int[sum];
int idx = 0;
for(int i = 0; i < snail.length; i++) {
for(int j = 0; j < snail[i].length; j++) {
if(snail[i][j] == 0) continue;
answer[idx++] = snail[i][j];
}
}
return answer;
}
}
제한 사항
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm][Programmers] K번째수 (Java) (0) | 2023.07.20 |
---|---|
[Algorithm][Programmers] 타겟 넘버 (Java) (0) | 2023.07.19 |
[Algorithm][Programmers] 같은 숫자는 싫어 (Java) (0) | 2023.07.19 |
[Algorithm][Programmers] 완주하지 못한 선수 (Java) (0) | 2023.07.19 |
[Algorithm][Programmers] 행렬 테두리 회전하기 (Java) (0) | 2023.07.18 |