[Programmers] 삼각 달팽이
10693 단어 PS with JavaPS with Java
문제 출처 : [Programmers] 삼각 달팽이, https://programmers.co.kr/learn/courses/30/lessons/68645
👨🏫문제
정수 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] |
💻코드
import java.util.ArrayList;
class Solution {
public int[] solution(int n) {
// 달팽이 구조를 2차원 배열 형태로 저장
int[][] snail = new int[n][n];
ArrayList<Integer> list = new ArrayList<>();
int x = 0, y = -1, num = 0;
/*
* 삼각 달팽이 모양으로 값을 추가할 때, 방향은 2차원 배열 [0,0]을 기준으로
* 아래 -> 오른쪽 -> 좌상단 순서로 n회 만큼 반복되고, 각 방향마다
* n부터 시작하여 1씩 감소하는 형태(n = 4 -> 아래 4 오른쪽 3 좌상단 2 아래 1)이다.
*/
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++){
if(i % 3 == 1){
y++;
}else if(i % 3 == 2){
x++;
}else{
y--;
x--;
}
snail[y][x] = ++num;
}
}
// 2차원 배열을 순회하며 0이 아닌 값을 list에 저장한다.
for(int i = 0; i < snail.length; i++){
for(int j = 0; j < snail[0].length; j++){
if(snail[i][j] != 0){
list.add(snail[i][j]);
}else{
break;
}
}
}
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
💡후기
import java.util.ArrayList;
class Solution {
public int[] solution(int n) {
// 달팽이 구조를 2차원 배열 형태로 저장
int[][] snail = new int[n][n];
ArrayList<Integer> list = new ArrayList<>();
int x = 0, y = -1, num = 0;
/*
* 삼각 달팽이 모양으로 값을 추가할 때, 방향은 2차원 배열 [0,0]을 기준으로
* 아래 -> 오른쪽 -> 좌상단 순서로 n회 만큼 반복되고, 각 방향마다
* n부터 시작하여 1씩 감소하는 형태(n = 4 -> 아래 4 오른쪽 3 좌상단 2 아래 1)이다.
*/
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++){
if(i % 3 == 1){
y++;
}else if(i % 3 == 2){
x++;
}else{
y--;
x--;
}
snail[y][x] = ++num;
}
}
// 2차원 배열을 순회하며 0이 아닌 값을 list에 저장한다.
for(int i = 0; i < snail.length; i++){
for(int j = 0; j < snail[0].length; j++){
if(snail[i][j] != 0){
list.add(snail[i][j]);
}else{
break;
}
}
}
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
오랜만에 난적을 만났다.
보자마자 수학 문제인가 싶어서 규칙을 찾으려고 머리를 이리저리 굴려보다가, 결국 2차원 배열을 이용해서 풀어야겠다고 생각을 한 시점이 문제를 전부 읽고 40분이나 지난 후였다.....😥
풀고 보니 문제 그대로 코드로 옮기기만 하면 되는 구현 문제였는데, 최대한 효율적이고 간결하게 풀려고 하려니까 혼자서 문제를 너무 어렵게 생각한 것 같다 ㅎㅎ..
의외로 생각을 그대로 옮겨적는 방식이 효율적일 때도 있으니, 처음부터 너무 어렵게 생각하려고 하지 말고 단순하게 접근해보는 방법도 있다는 걸 깨닫게 되는 문제였다!😊
Author And Source
이 문제에 관하여([Programmers] 삼각 달팽이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jaeung5169/Programmers-삼각-달팽이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)