오늘의 학습 키워드
https://leetcode.com/problems/delete-greatest-value-in-each-row/description/
- 완주하지 못
공부한 내용 본인의 언어로 정리하기
문제분석
문제를 살펴보면, 각 행에서 가장 큰 값을 추출하고 이를 반복적으로 계산하여 최종적으로 합산하는 것이 핵심이다.
각 단계에서 가장 큰 값을 제거하며 반복 작업을 진행하고, 모든 값이 소진되었을 때 추출했던 값들의 총합을 반환하면 된다.
접근 방법
문제의 요구대로 배열에서 값을 직접 제거하며 작업을 진행하려고 하면 코드가 지나치게 복잡해질 수 있다.
대신 각 행을 오름차순 또는 내림차순으로 정렬하여 간단히 처리하는 방법이 더 효과적이다.
정렬된 배열을 기준으로 반복문을 사용해 열별 최대값을 비교하고, 이 과정에서 마치 배열에서 값이 제거된 것과 동일한 효과를 얻을 수 있다.
구현 코드
class Solution {
public int deleteGreatestValue(int[][] grid) {
int sum = 0;
// 각 행을 오름차순으로 정렬
for (int[] row : grid)
Arrays.sort(row);
// 열별 최대값 계산 및 합산
for (int j = 0; j < grid[0].length; j++) { // 각 열을 반복
int max = 0;
for (int i = 0; i < grid.length; i++) { // 열 내 각 행의 값을 비교
max = Math.max(grid[i][j], max); // 열의 최대값 갱신
}
sum += max; // 최대값을 누적
}
return sum;
}
}
코드스니펫
1. 행 정렬
for (int[] row : grid)
Arrays.sort(row);
각 행을 정렬하면 행의 가장 큰 값이 마지막 열로 정리된다. 이를 통해 직접 배열을 수정하지 않고도 문제를 간단히 처리할 수 있다.
2. 열별 최대값 계산
for (int j = 0; j < grid[0].length; j++) {
int max = 0;
for (int i = 0; i < grid.length; i++) {
max = Math.max(grid[i][j], max);
}
sum += max;
}
열별로 반복하면서 행들의 값을 비교하여 최대값을 찾고, 이를 누적합에 추가한다.
3. 최종 반환
return sum;
누적된 결과를 반환하여 문제의 답을 도출한다.
오늘의 회고
리트코드는 문제는 처음 풀어봤다. 어제도 리트코드문제가 제출되었는데 기본 영문문제라 접근이 힘들어 넘겼는데 이틀 연속 그냥 넘기기는 안되서 그냥 풀었다.
자바에서 오름차순, 내림차순 관련 문제가 지속적으로 나오는데 그거에 대한 방법들을 한번 정리하면 좋을 것 같다.
- 완주하지
'TIL' 카테고리의 다른 글
[TIL-24/11/24] 99클럽 코테 스터디 28일차 TIL - 리트코드 506.Relative-Ranks - JAVA (0) | 2024.11.25 |
---|---|
[TIL-24/11/20] 99클럽 코테 스터디 24일차 TIL - 백준 1417번 국회의원 선거 - JAVA (2) | 2024.11.21 |
[TIL-24/11/15] 99클럽 코테 스터디 19일차 TIL 백준 1927번 : 최소 힙 - 자바 (0) | 2024.11.16 |
[TIL-24/11/14] 99클럽 코테 스터디 18일차 TIL 백준 26042번 : 식당 입구 대기 줄 - 자바 (0) | 2024.11.15 |
[TIL-24/11/13] 99클럽 코테 스터디 17일차 TIL 백준 25497번 : 기술 연계마스터 임스 - 자바 (1) | 2024.11.13 |