기본 틀 :
using System;
public class Solution {
public int[] solution(int n, long left, long right) {
int[] answer = new int[] {};
return answer;
}
}
문제를 보고 처음에는
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public int[] solution(int n, long left, long right)
{
int[,] multiArray = new int[n,n];
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= i; j++)
{
multiArray[j,i] = i + 1;
multiArray[i,j] = i + 1;
}
}
List<int> list = new List<int>();
int[] flatArray = multiArray.Cast<int>().ToArray();
for(long i = left; i <= right; i++)
list.Add(flatArray[i]);
return list.ToArray();
}
}
위와 같이 n의 크기에 따른 2차원 배열을 만들고
2차원 배열을 Cast<int>().ToArray()로
1차원 배열 형태로 만들어줬다.
그 후 Skip()과 Take()로 원한는 만큼의 배열을 자를 계획이었지만,
left와 right가 long 타입이라 사용하지 못하고
고민 끝에 List를 만들어 원하는 만큼 추출해냈다.
그 결과...
런 타임 에러(int 형 자료의 한계 => long을 써야 한다는 뜻) + 시간초과에 빠졌다...
결국 다른 풀이법이 떠오르지 않아서
과거에 JavaScript로 어떻게 풀었는지 찾아봤다...
(오늘도 과거의 나 한테 졌다...)
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int n, long left, long right)
{
List<int> list = new List<int>();
for(long i = left; i <= right; i++)
{
int div = (int)(i / n);
int mod = (int)(i % n);
int temp = mod >= div ? mod + 1 : div + 1;
list.Add(temp);
}
return list.ToArray();
}
}
JavaScript 코드를 C#으로 바꾸면 위와 같은 코드가 되며
List에 left ~ right까지의 순차적으로 나눈 몫과 나머지를 구하여 그 중 큰 값에 +1 한 값을
List에 담는 형태로 문제를 해결했었다...
'문제 풀기 > C#' 카테고리의 다른 글
89. 할인 행사 (0) | 2025.03.11 |
---|---|
88. 행렬의 곱셈 (0) | 2025.03.11 |
86. H-index (0) | 2025.03.06 |
85. 연속 부분 수열 합의 개수 (0) | 2025.03.04 |
84. 괄호 회전하기 (0) | 2025.03.04 |