일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코딩테스트
- 신문스크랩
- 코딩테스트 연습
- python
- 구글
- java 객체지향 프로그래밍
- SSAFY
- SSAFY 7기
- 네트워크 관리사
- 백준
- 리얼클래스
- 백준위
- html
- it 이슈
- 카카오
- IT 동향
- 싸피셜
- 코테
- 인앱결제
- 프로그래머스
- 네트워크 관리사 2급 실기
- SSAFYcial
- 신문 스크랩
- 네트워크 관리사 2급
- KT
- it 뉴스
- 싸피
- Java
- 우테코
- IT 트렌드
Archives
- Today
- Total
개발자일걸요..?
17298번 오큰수 본문
728x90
반응형
문제링크 : www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
버전 1. 입력을 stack에 받고, 복사한 stack temp을 이용하여 stack의 top이 temp의 top보다 큰지 확인(시간초과)
stack = []
def push(L,a):
L.insert(0,a)
def pop(L):
del L[0]
def top(L):
return L[0]
def size(L):
return len(L)
import sys
N = int(sys.stdin.readline())
stack = list(map(int,sys.stdin.readline().split()))
index = 0
for _ in range(N):
now = top(stack)
pop(stack)
temp = []
if(size(stack)==0):
print(-1,end =' ')
else:
while(size(stack)!=0):
if(top(stack)>now):
break
else:
push(temp,top(stack))
pop(stack)
if(size(stack)!=0):
print(top(stack), end= ' ' )
else:
print(-1, end=' ')
while(size(temp)!=0):
push(stack,top(temp))
pop(temp)
버전 2. 오큰수를 찾지 못한 수의 index를 stack에 저장해놓고 for문을 돌며 오큰수 찾기(시간초과)
def push(L,a):
L.insert(0,a)
def pop(L):
del L[0]
def top(L):
return L[0]
import sys
N = int(sys.stdin.readline())
numbers = list(map(int,sys.stdin.readline().split()))
answer = [-1 for _ in range(N)]
temp = []
for i in range(0,N):
while((len(temp)!=0) and (numbers[top(temp)]<numbers[i])):
answer[top(temp)] = numbers[i]
pop(temp)
push(temp, i)
for item in answer:
print(item, end = ' ')
버전 3. 함수로 이동하면서 소요되는 시간을 줄이고자 버전2를 함수 없이 만든 버전(메모리:153476KB 시간 : 1632ms)
import sys
N = int(sys.stdin.readline())
numbers = list(map(int,sys.stdin.readline().split()))
answer = [-1 for _ in range(N)]
stack = [0]
i = 1
while(stack and i<N):
while(stack and (numbers[stack[-1]]<numbers[i])):
answer[stack[-1]] = numbers[i]
stack.pop()
stack.append(i)
i+=1
for item in answer:
print(item, end = ' ')
반응형
'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글
2164번 카드2 (0) | 2021.02.24 |
---|---|
18258번 큐2 (0) | 2021.02.24 |
1874번 스택 수열 (0) | 2021.02.22 |
4949번 균형잡힌 세상 (0) | 2021.02.22 |
9012번 괄호 (0) | 2021.02.22 |
Comments