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 |
댓글