본문 바로가기
Algorithm/BOJ

[BOJ] 17298 | 오큰수

by 밤초록 2022. 2. 4.
17298 | 오큰수
https://www.acmicpc.net/problem/17298

 

 

 

작성 코드

 

def solution(n: int, a: str) -> str:
    nums = list(map(int, a.split()))
    answer = []
    for idx, num in enumerate(nums):
        if idx != (len(nums)-1) and max(nums[idx + 1:]) <= nums[idx]:
            answer.append('-1')
        for com_idx in range(idx + 1, len(nums)):
            if nums[idx] < nums[com_idx]:
                answer.append(str(nums[com_idx]))
                break
    answer.append('-1')
    return answer


n = input()
a = input()
res = solution(n, a)
print(' '.join(res))

 

  • 일일이 값을 비교해주는 방식을 선택했다 -> 시간 초과
  • 숫자를 한 칸씩 띄어 쓴 형태로 출력해야 돼서 join을 사용하려고 했는데 str 형식에만 적용 가능하다고 해서 일일이 str 형식으로 바꾸어주었다

 

 

이상 코드

 

def solution(n: int, a: str) -> List[int]:
    nums = list(map(int, a.split()))
    answer = [-1] * n
    stack = []

    stack.append(0)
    for i in range(1, n):
        while stack and nums[i] > nums[stack[-1]]:
            answer[stack.pop()] = nums[i]
        stack.append(i)

    return answer


n = int(input())
a = input()
res = solution(n, a)

 

  • stack에 index자체를 넣음
  • 스택에는 이때까지 자기보다 큰 수가 없던 수들, for i in range(1, n) 을 통해 nums[i] 가 크면 answer[stack.pop()] = nums[i]을 통해 값을 바꾸어줌
  • print(*res) 에서 * 기호를 통해 출력하면 간단하게 출력 조건을 만족시킬 수 있음

 

 

학습

 

  • 스택을 단순히 값만 넣는 것이 아닌 인덱스도 넣을 수 있게끔 활용!
  • 1 2 3 4 와 같이 출력해야 하는데 반환 값의 형식이 배열이면 * 기호를 활용하자
반응형

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 11659 | 구간 합 구하기 4  (0) 2022.02.09
[BOJ] 18111 | 마인크래프트  (0) 2022.02.08
[BOJ] 12871 | 무한 문자열  (0) 2022.01.27
[BOJ][#] 1002 | 터렛  (0) 2022.01.25
[BOJ][#] 1920 | 수 찾기  (0) 2022.01.24

댓글