[BOJ-S4] 2491: 수열 (실패)

아이엠강욱·2023년 6월 2일
0

코딩테스트

목록 보기
19/23

해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://www.acmicpc.net/problem/2491


문제설명

내 풀이 코드 (시간초과 실패)

"""
백준 2491 (S4): 수열
https://www.acmicpc.net/problem/2491
(시간초과 실패)
"""

n = int(input())
data = list(map(int, input().split()))
result = []

for i in range(n-1):
  upCount = 0
  downCount = 0
  tIdx = i
  for j in range(i+1, n):
    if data[tIdx] <= data[j]:
      upCount += 1
      tIdx = j
    else:
      tIdx = i
      break
  for j in range(i+1, n):
    if data[tIdx] >= data[j]:
      downCount += 1
      tIdx = j
    else:
      break

  temp = (upCount, downCount)
  result.append(temp)

result = [max(d) for d in result]
print(max(result) + 1)

되게 복잡하게 코드를 작성했다. 각 원소마다 체크를 했다. 상향세는 몇까지, 하향세는 몇까지.
하지만 반복문이 총 4번이 들어가면서 시간초과 에러가 난 것 같다.
하나 더 알았는데 만약에 길이가 1이면 이 코드는 실행되지 않았다. 그 부분을 확인하지 못했다.

다른 개발자님의 코드

"""
백준 2491 (S4): 수열
https://www.acmicpc.net/problem/2491
"""

n = int(input())
data = list(map(int, input().split()))

if n == 1:
  print(1)
  exit(0)

result = 0
upCount = 0
downCount = 0

# 상승세 확인
for i in range(1, n):
  if data[i-1] <= data[i]:
    upCount += 1
  else:
    upCount = 0

  if result < upCount:
    result = upCount

# 감소세 확인
for i in range(1, n):
  if data[i-1] >= data[i]:
    downCount += 1
  else:
    downCount = 0

  if result < downCount:
    result = downCount

print(result + 1)

n == 1일때 exit은 내가 직접 작성한 코드이다. 1이면 정답은 무조건 1이기 때문에 종료해버린다.

왜 이생각을 못했을까?
위의 코드는 최대 길이변수를 정해서 대체해주는 방식.... 예를들어 계속 상승세였다가 하향세로 갑자기 떨어지면 count를 0으로 세팅한다.

그리고 최대길이가 측정한 길이보다 크면 측정한 길이로 대체해주면 내가 짠 코드처럼 반복문이 많이 필요없게된다.

느낀점..

항상 다른 개발자님들의 코드를 보고나면 현타가 온다.
문제를 풀때도 아 이렇게까지 코드 길게 안쳐도 될거같은데 하면서도 치고있는 1인..

부스트캠프 8기가 얼마 남지 않았는데.. 무섭다 무서워
자신감이 조금씩 떨어진다.. 후들들...

이게 실버4라는데... 실버1짜리는 손도 못대겠ㄷ..

profile
블로그 이전했습니다!! https://dev-iamkanguk.tistory.com/ <<- 여기로 오세용!!

0개의 댓글