Coding Test
[백준] 17608.막대기
동만쓰
2022. 7. 7. 01:02
import sys
def stick(nums):
stk=[]
stk.append(len(nums)-1)
max=nums[-1]
for i in range(len(nums)-2,-1,-1): #(len,0,-1)을 하면 0 이전까지만 포함되서 맨 처음 element엔 접근을 안함
if nums[i]>max:
stk.append(i)
max=nums[i]
return len(stk)
n=int(sys.stdin.readline())
nums=[int(input()) for _ in range(n)] #공백이 기준이 아닌 \n이 기준일 때
print(stick(nums))
stack을 써보고 싶어서 이렇게 코드를 짰는데 시간초과가 나왔다.
결과는 숫자 하나면 되는데 괜히 리스트를 하나 더 많들어서 스택연산을 하니까 그런 것 같다
또한 input()보다는 readline()이 더 빠르다고 한다.
import sys
n=int(sys.stdin.readline())
nums=[int(sys.stdin.readline()) for _ in range(n)] #공백이 기준이 아닌 \n이 기준일 때
res=1
max=nums[-1]
for i in range(len(nums)-1,-1,-1):
if nums[i]>max:
res+=1
max=nums[i]
print(res)
input()을 readline()으로 바꾸고 함수를 없애니까 시간초과를 해결할 수 있었다.
import sys
def stick(nums):
stk=[]
stk.append(len(nums)-1)
max=nums[-1]
for i in range(len(nums)-2,-1,-1): #(len,0,-1)을 하면 0 이전까지만 포함되서 맨 처음 element엔 접근을 안함
if nums[i]>max:
stk.append(i)
max=nums[i]
return len(stk)
n=int(sys.stdin.readline())
nums=[int(sys.stdin.readline()) for _ in range(n)] #공백이 기준이 아닌 \n이 기준일 때
print(stick(nums))
맨 처음처럼 함수와 스택을 사용하고 input()만 readline()으로 바꾸니까 통과했다.
입력 속도도 중요한 듯 하다.