출처: 프로그래머스 코딩 테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/147354
나의 풀이
public int solution(int[,] data, int col, int row_begin, int row_end)
{
// 1차원 배열의 리스트로 변환
var list = new List<int[]>();
int width = data.GetLength(1);
for(int i = 0; i < data.GetLength(0); ++i)
{
var array = new int[width];
for(int k = 0; k < width; ++k)
array[k] = data[i, k];
list.Add(array);
}
// 정렬 및 누적 XOR
var orderedList = list.OrderBy(o => o[col - 1])
.ThenByDescending(o => o[0]); // Then 주의
var answer = orderedList.Skip(row_begin - 1)
.Take(row_end - row_begin + 1)
.Select((s, index) =>
{
int result = 0;
for(int k = 0; k < s.Length; ++k)
result += s[k] % (row_begin + index);
return result;
})
.Aggregate((cur, next) => cur ^ next);
return answer;
}
실수한 부분 1.
문제에 열 갯수가 주어지지 않았다. (3개가 아닐 수도 있다)
실수한 부분 2.
Linq의 OrderBy 다음에는 OrderBy 가 아니라 ThenBy를 써야한다.
Java에서는 문제가 int[][] 로 주어졌기 때문에 Sort를 바로 사용할 수 있어서 Array.Sort를 사용한 풀이가 많았음.
Array.Sort(data, (o1, o2) -> {
if (o1[finalCol] == o2[finalCol]) return o2[0] - o1[0];
return o1[finalCol] - o2[finalCol];
});
'🛡️ 코딩테스트 > 🛡️ 코테 : 프로그래머스' 카테고리의 다른 글
C# 시소 짝꿍 - 조합 / 프로그래머스 [Lv.2] (0) | 2023.04.03 |
---|---|
C# 피로도 - DFS 순열 / 프로그래머스 [Lv.2] (0) | 2023.04.03 |
C# 혼자 놀기의 달인 - 완전탐색 / 프로그래머스 [Lv.2] (0) | 2023.04.01 |
C# 숫자 카드 나누기 - 최소공배수 / 프로그래머스 [Lv.2] (0) | 2023.03.31 |
C# 호텔 대실 - 그리디 / 프로그래머스 [Lv.2] (0) | 2023.03.30 |