@Eeap
velog
@Eeap
전체 방문자
오늘
어제
  • 전체 (168)
    • osam (1)
    • Cloud (21)
      • Docker (2)
      • AWS (13)
    • AI & Data (7)
    • Algorithm (76)
      • Baekjoon (75)
      • Codeforces (1)
    • Language (18)
      • Java (18)
    • Back-end (17)
      • Spring (3)
      • JSP & Servlet (12)
      • Go (2)
    • 일상 (4)
    • 기타 (8)
    • git (1)
    • Infra (9)
      • Apache Kafka (5)
      • Kubernetes (4)
      • 기타 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • bedrock agent
  • bedrock api
  • 인터페이스
  • SageMaker
  • knowledge bases
  • 심폴릭링크
  • AWS CodeArtifact
  • Python
  • 오블완
  • converse api
  • java
  • Agent
  • bedrock
  • CLASS
  • AWS CodeCatalyst
  • sagemaker unified studio
  • AWS CodeStar
  • invokemodel api
  • 티스토리챌린지
  • flink

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
@Eeap

velog

Algorithm/Baekjoon

9465번 파이썬

2022. 4. 7. 22:38
반응형

처음에 이 문제를 풀을 때 뜯을려고 하는 스티커의 왼쪽 부분을 전부 다 검사해서(인접 변 제외) max인 값을 현재 스티커 값과 더해서 dp를 만들려고 했는데 답은 잘 나오는데 시간 초과 에러가 떴다..아마 시간 복잡도가 n^2이라 그런것 같다.

그래서 생각한 다른 방법은 만약 첫번째 행의 3번째 스티커를 뜯었다고 가정할때 (보기에선 100값 스티커) 두번째 행의 2번째와 첫번째 dp값 중 최대값만 계산해서 현재 스티커 값에 플러스 해주는 방식이다. 이걸 코드로 나타내면 아래와 같고 이런 방식을 이용하는 이유는 현재 스티커 값을 최대로 뜯을려고 하기 때문에 이웃한 변 다음칸을 뜯는게 효율적이지만 값이 그 옆에꺼가 더 클 경우가 그게 더 효율적일 수 있기 때문이다.

그리고 현재 col-3한 값을 구하는 것은 col-1을 구하는 경우에 포함되어있다.

import sys
input = sys.stdin.readline
t = int(input())
for __ in range(t):
  n = int(input())
  ary = [list(map(int,input().split())) for _ in range(2)]
  if n >=2:
    ary[0][1] +=ary[1][0]
    ary[1][1] += ary[0][0]
  for col in range(2,n):
    for row in range(2):
      ary[row][col]+=max(ary[(row+1)%2][col-1],ary[(row+1)%2][col-2])
  print(max(ary[0][n-1],ary[1][n-1]))

 

반응형
저작자표시 (새창열림)

'Algorithm > Baekjoon' 카테고리의 다른 글

9461번 파이썬  (0) 2022.04.09
2294번 파이썬  (0) 2022.04.09
1920번 파이썬  (0) 2022.04.06
2133번 파이썬  (0) 2022.04.06
14501번 파이썬  (0) 2022.04.05
    'Algorithm/Baekjoon' 카테고리의 다른 글
    • 9461번 파이썬
    • 2294번 파이썬
    • 1920번 파이썬
    • 2133번 파이썬
    @Eeap
    @Eeap

    티스토리툴바