[LeetCode]Next Greater Element I

2024. 3. 31. 16:03·SW개발/코딩테스트

https://leetcode.com/problems/next-greater-element-i/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문제 분석

nums1과 nums2 리스트가 주어집니다. nums1 리스트는 nums2 리스트의 subset입니다. nums1의 숫자가 nums2에서 위치한 곳보다 뒤에서 큰 숫자를 발견하면 그 숫자를, 아니라면 -1을 리턴하는 문제입니다.

 

처음 시도한 답안

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        next_greater_dict = {}
        stack = []

        for num2 in nums2:
            while stack and stack[-1] < num2:
                num = stack.pop()
                next_greater_dict[num] = num2

            stack.append(num2)

        for idx, num1 in enumerate(nums1):
            if num1 in next_greater_dict:
                nums1[idx] = next_greater_dict[num1]
            else:
                nums1[idx] = -1

        return nums1

접근 방법

  1. 스택과 해시 테이블을 이용하는 문제입니다.
  2. next_greater_dict에는 key에는 숫자 value에는 발견한 큰 값을 기록합니다. stack은 이전에 등장한 값들보다 큰 값을 발견했는지 유무를 체크하는데 사용됩니다.
  3. nums2 리스트를 순회합니다.
    1. 스택에 값이 있고 스택의 마지막 값이 현재 등장한 숫자보다 큰 동안 순회합니다.
      1. 스택에서 pop하고 pop한 값을 키로 등장한 숫자를 value로 하여 큰 숫자에 대한 정보를 기록합니다.
    2. 스택에 등장한 숫자를 추가합니다.
  4. nums1을 순회하면서 next_greater_dict에 값이 있다면 value값 없다면 -1로 지정합니다.

만약 스택에 남아있는 값이 있다면 해당 숫자보다 큰 숫자를 찾지 못했거나 nums1에는 존재하지 않는 숫자라는 뜻입니다. 큰 숫자를 찾은 숫자들은 모두 next_greater_dict에 기록되어 있으므로 스택에 남아있는 값은 무시해도 상관없습니다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[LeetCode]Add Binary  (0) 2024.04.02
[LeetCode]Longest Common Subsequence  (0) 2024.04.01
[LeetCode]Daily Temperatures  (0) 2024.03.30
[LeetCode]Coin Change  (4) 2024.03.29
[LeetCode]Decode String  (0) 2024.03.28
'SW개발/코딩테스트' 카테고리의 다른 글
  • [LeetCode]Add Binary
  • [LeetCode]Longest Common Subsequence
  • [LeetCode]Daily Temperatures
  • [LeetCode]Coin Change
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    django
    트리 #AVL #알고리즘 #자료구조
    배달비 공유
    어플리케이션
    g
    배공파용
    오픈소스
    컨트리뷰터
    라이프 스타일
    배달
    음식
    Contributor
    플레이스토어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[LeetCode]Next Greater Element I
상단으로

티스토리툴바