스파르탄 365 2주차 (3) 오큰수
2주차
백준 17298번 오큰수
문제링크 : https://www.acmicpc.net/problem/17298
💡 풀이 전 계획과 생각
- 이중 for문을 통해 순차 탐색을 하면 되겠다
💡 풀이
틀린 코드
import sys
arr_NGE = list()
def NGE(arr):
for i in range(len(arr)):
std_i = arr[i]
for j in range(i, len(arr)):
if std_i < arr[j]:
arr_NGE.append(arr[j])
break
elif j == (len(arr)-1):
arr_NGE.append(-1)
N = int(sys.stdin.readline())
arr_A = list(map(int ,sys.stdin.readline().split()))
# for _ in range(N):
NGE(arr_A)
for a in arr_NGE:
print(a, end=" ")
맞은 코드
import sys
N = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
stck = []
# 깨달은 부분 : 오큰수를 찾지 못하는 예외 케이슬 둘 것이 아니라,
# 미리 -1 로 다 저장해놓으면 그것이 바로 예외 처리
result = [-1 for _ in range(N)]
stck.append(0)
i = 1
# 배운 부분: 스택에 값이 있고 while stck,
# 인덱스도 사용하려면 and 명령어를 통해 i < N을 써주면 된다.
while stck and i < N:
# 이해 안가는 부분: 왜 인덱스로 해야하는지 이해가 안감 -_-
while stck and nums[stck[-1]] < nums[i]:
print('stck[-1] is ', stck[-1])
result[stck[-1]] = nums[i]
stck.pop()
stck.append(i)
i += 1
for i in result:
print(i, end=" ")
🧐 막혔던 점과 고민
1. 시간초과
이중 for문을 통해 순차탐색을 하니 시간초과가 났다.
그래서 스택을 써야하나? 싶은 마음에 pop()함수를 이용했다.
2. pop을 쓰니 반복이 불가능
pop()을 쓰니 기존 원소가 사라져 첫 원소 이후로 반복이 불가능했다.
👏🏻 알게된 개념과 소감
- 배운 부분: 스택에 값이 있고 while stck,
인덱스도 사용하려면 and 명령어를 통해 i < N을 써주면 된다.
while stck and i < N:
- 깨달은 부분 : 오큰수를 찾지 못하는 예외 케이슬 둘 것이 아니라,
미리 -1 로 다 저장해놓으면 그것이 바로 예외 처리
result = [-1 for _ in range(N)]
❓ 아직 모르겠는 부분
이해 안가는 부분: 왜 인덱스로 해야하는지 이해가 안감 -_-
- 금요일 (혹은 토요일) 해설강의를 듣고 해결해야 할 것 같다.
Author And Source
이 문제에 관하여(스파르탄 365 2주차 (3) 오큰수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dawnofspring/스파르탄-365-2주차-3-오큰수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)