일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- dfs #bfs #이진트리 #파이썬 #리트코드
- dfs #python #leetcode
- leetcode #python #dfs #재귀
- leetcode #subsets #dfs #itertools #python
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- final #java #자바 #안드로이드
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- Python #leetcode #dfs #그래프 #백트래킹
- dfs #python #leetcode #combination
- 리트코드 #팰린드롬 #파이썬
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- 2004 #조합 0의 개수 #백준
- 아스테리스크 #Asterisk #파이썬
- python #백준 #9375 #패션왕 #신해빈
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- dfs #그래프 #graph #python #leetcode #course #schedule
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- dfs #leetcode #python #graph #그래프
- 파이썬 #zip
- dfs #bfs #leetcode #python
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
- gcd #최대공약수 #백준 #2981 #검문
- dfs #leetcode #python
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- 코틀린 #Do it #깡샘 #안드로이드
- Today
- Total
멋진 개발자가 되고 싶다
[백준,Python] 17298. 오큰수 본문
문제
크기가 N인 수열 A = A1, A2,..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.
예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.
입력
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
출력
총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.
해설:
별 생각없이 풀었는데 생각해보니 오큰수가 뭐지? 싶어 검색해봤지만 나오지 않았다.
내 예상엔 "오른쪽 가장 가까운 곳에 있는 큰 수"이지 않을까.. 싶음.
첨에 별 짓을 다 해봤다.
맨 뒤 인덱스부터 접근도 해보고
스택도 여러개 써보고...
근데 절대 안 풀려서 "파이썬 알고리즘 인터뷰"에서 본 문제가 떠올랐다.
https://cool-developer.tistory.com/42
[LeetCode,Python] 739. 일일 온도(Daily Temperatures)
매일의 화씨온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야 하는지를 출력하라. Input: temperatures = [73,74,75,71,69,72,76,73] Output: [1,1,4,2,1,1,0,0] ** 깔끔한 답안 ** 1...
cool-developer.tistory.com
이 문제랑 접근법이 똑같더라~
(근데 왜 못 푼 거지?)
우선 내 코드는 이렇다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import sys
n = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
answer = [-1] * n
stack = []
for i, cur in enumerate(nums):
while stack and cur > nums[stack[-1]]:
answer[stack.pop()] = cur
stack.append(i)
for i in range(n):
print(answer[i],end=' ')
|
cs |
스택에 cur을 쌓아 나가는걸 베이스로 하고
만약 cur이 stack [-1]보다 크면
pop 하고 answer에서 pop 한 인덱스의 값을 cur로 바꾼다.
여기서 내가 살짝 헷갈렸던 것은
line 9에서
"cur > nums [stack [-1]]이 아닌데 cur > nums [stack [-2]]는 성립하면 어떡하지?"
였는데
그럴 수가 없는 것이
애초에 이전의 while문 반복을 통해 nums [stack [-1]]보다 더 큰 값은 쌓여있지 않습니다!!
'Algorithm Study > 백준' 카테고리의 다른 글
[백준,Python] 1002. 터렛 (0) | 2021.07.18 |
---|---|
[백준,Python] 9020. 골드바흐의 추측 (0) | 2021.07.17 |
[백준,Python] 1929. 소수 구하기(feat.에라토스테네스의 체) (0) | 2021.07.11 |
[백준,Python] 2447. 별 찍기 - 10 (feat.재귀함수) (0) | 2021.07.02 |
[백준,Python] 10872. 팩토리얼(Factorial) (feat.재귀함수) (0) | 2021.07.01 |