2023
04.02

출처: 프로그래머스 코딩 테스트 연습
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];
});

 

COMMENT