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()으로 바꾸니까 통과했다.

입력 속도도 중요한 듯 하다.