본문 바로가기
Leetcode

414. Third Maximum Number

by Doromi 2023. 11. 1.
728x90
반응형
주어진 배열에서 세 번째로 큰 수를 찾는 문제입니다. 주어진 배열에서 중복된 수는 무시하고, 유일한 값만 고려합니다.

문제 설명:

주어진 배열 nums에서 세 번째로 큰 값을 찾습니다. 중복된 값은 무시하고, 유일한 값만 고려합니다.

예를 들어, 입력 배열 nums가 다음과 같다면:
[3, 2, 1]
여기서 세 번째로 큰 값을 찾으면 1이 됩니다.

또 다른 예로, 입력 배열 nums가 다음과 같다면:
[1, 2]
여기서 세 번째로 큰 값을 찾으면 2가 됩니다. 첫 번째로 큰 값과 두 번째로 큰 값은 중복된 수를 무시하고 계산합니다.

노트:

배열 nums에는 최소한 세 개의 유일한 값이 포함되어야 합니다. 적어도 세 번째로 큰 값을 찾을 수 있어야 합니다.
이 문제를 해결하는 방법으로는 배열을 한 번 순회하면서 최대값을 갱신하고, 최대값들을 저장하는 변수를 사용하면 됩니다. 
public int ThirdMax(int[] nums) {
    int? firstMax = null;
    int? secondMax = null;
    int? thirdMax = null;

    foreach (int num in nums) {
        if (num == firstMax || num == secondMax || num == thirdMax) {
            continue; // 중복된 값은 무시
        }

        if (firstMax == null || num > firstMax) {
            thirdMax = secondMax;
            secondMax = firstMax;
            firstMax = num;
        } else if (secondMax == null || num > secondMax) {
            thirdMax = secondMax;
            secondMax = num;
        } else if (thirdMax == null || num > thirdMax) {
            thirdMax = num;
        }
    }

    // 만약 세 번째로 큰 값이 존재하지 않으면, 첫 번째로 큰 값을 반환
    return thirdMax ?? firstMax ?? 0;
}
int? (nullable int)를 사용하여 값이 없을 수 있는 경우를 처리하고, 중복된 값은 무시합니다. 이로써 32비트 정수 범위 내에서 세 번째로 큰 값을 찾는 문제를 해결합니다.
728x90
반응형

'Leetcode' 카테고리의 다른 글

70. Climbing Stairs  (0) 2023.11.03
101. Symmetric Tree  (0) 2023.11.01
283. Move Zeroes  (0) 2023.10.31
303. Range Sum Query - Immutable  (0) 2023.10.31
94. Binary Tree Inorder Traversal  (0) 2023.10.30