문제 풀기/C#
108. 삼각 달팽
kagan-draca
2025. 4. 24. 17:43
기본 틀 :
using System;
public class Solution {
public int[] solution(int n) {
int[] answer = new int[] {};
return answer;
}
}
문제를 해결하기 위해서 1차원 배열을 사용해야 하는지 아니면 2차원 배열을 사용해야 하는지
+
반복문은 어떤 형태로 동작 시켜야 하는지 많이 고민했다.
배열은 1차원 배열로 바로 결과를 만드는 건 불가능하다 생각해서 2차원 배열을 사용했다.
int[,] triangle = new int[n, n];
반복문으로 값을 결정하는 방법으로는
int num = 1;
int x = -1, y = 0;
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
{
x--;
y--;
}
triangle[x,y] = num++;
}
}
위와 같이 작성 했는데
i % 3 == 0이면 x를 증가시켜 2차원 배열 안에 정해진 n의 크기 만큼 숫자가 들어갈 수 있도록 구현했다.
ex ) n = 4이면
[1, 0, 0, 0]
[2, 0, 0, 0]
[3, 0, 0, 0]
[4, 0, 0, 0]
배열들의 첫 번째 위치에 해당 값들이 들어갈 수 있도록 만든 것이다.
i % 3 == 1인 경우는 y를 증가시켜
마지막 행의 열에 다음 숫자들이 올 수 있도록 만들어줬다.
ex )
[1, 0, 0, 0]
[2, 0, 0, 0]
[3, 0, 0, 0]
[4, 5, 6, 7]
다음으로
i % 3 == 2인 경우 x와 y를 1씩 감소시켜 줘서
[1, 0, 0, 0]
[2, 9, 0, 0]
[3, 0, 8, 0]
[4, 5, 6, 7]
삼각형 형태가 될 수 있도록 만들어줬다.
위의 3단계 과정을 반복 진행하면
[1, 0, 0, 0]
[2, 9, 0, 0]
[3,10, 8, 0]
[4, 5, 6, 7]
위와 같이 2차원 배열에 삼각형 모양으로 값이 저장된다.
이를 List를 활용해서
List<int> result = new List<int>();
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= i; j++)
{
result.Add(triangle[i,j]);
}
}
return result.ToArray();
배열의 요소를 리스트에 저장 후
배열로 변환 및 반환 과정을 거치면 문제를 해결할 수 있었다
전체 코드 :
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int n)
{
int[,] triangle = new int[n, n];
int num = 1;
int x = -1, y = 0;
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
{
x--;
y--;
}
triangle[x,y] = num++;
}
}
List<int> result = new List<int>();
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= i; j++)
{
result.Add(triangle[i,j]);
}
}
return result.ToArray();
}
}
이 문제를 통해 반복문과 배열을 이런 방식으로 조회 및 값을 삽입할 수 있다는 사실에 놀라움과 실력적으로 부족함을 느낀다...