백준 2096 < 내려가기 > Python

2023. 2. 23.·☕️ 커리어 & 인터뷰 준비/코딩 테스트

📍문제 링크

https://www.acmicpc.net/problem/2096

 

2096번: 내려가기

첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.

www.acmicpc.net

 

📍알고리즘 분류

- 다이나믹 프로그래밍

- 슬라이딩 윈도우

 

📍문제 풀이

세 수가 일렬로 쭉 내려오는 수열이 있다. 내려올 때, 직선, 대각선으로 내려올 수 있다고 할 때

최댓값과 최솟값을 구하라

 

/*
1번 라인	1 2 3
2번 라인	4 5 6
3번 라인	4 9 0


1
1 2 3
일 때 각 라인에서 가능한 최대 최소

	1	2	3
최대	1	2	3
최소	1	2	3


2
1 2 3
4 5 6
일 때 각 라인에서 가능한 최대 최소

최대	6(4 + 2)	8(5 + 3)	9(6 + 3)
최소	5(4 + 1)	6(5 + 1)	8(6 + 2)

점화식을 세우면
s11 s12 s13
s21 s22 s23 일때

dp(2) = [
[ s21 + max(s11, s12), s22 + max(s11, s12, s13), s23 + max(s12, s13) ]
[ s21 + min(s11, s12), s22 + min(s11, s12, s13), s23 + min(s12, s13) ]
]


이 성립한다

*/

 

JavaScript로는 메모리 초과로 인해 풀 수 없는 것으로 보인다..

 

📍코드

import sys

N = int(input())
a, b, c = map(int, input().split())
d = a
e = b
f = c

for i in range(N - 1):
    x, y, z = map(int, sys.stdin.readline().rstrip().split())
    A = x + max(a, b)
    B = y + max(a, b, c)
    C = z + max(b, c)
    D = x + min(d, e)
    E = y + min(d, e, f)
    F = z + min(e, f)
    a = A
    b = B
    c = C
    d = D
    e = E
    f = F

print(max(a, b, c), min(d, e, f))

 

- large A, B ... 등을 사용하는 이유

그냥 a, b, c 를 사용하면 a, b, c가 최신화 할때마다 다음 값에 간섭하여 형태가 왜곡됨

 

📍리뷰

- sliding window는 알고리즘이 아니라 테크닉으로, DP 에서 배열 대신 변수를 사용하여 메모리를 아끼는 것을 지칭하기도 한다

(토글링이라고도 한다)

'☕️ 커리어 & 인터뷰 준비/코딩 테스트' 카테고리의 다른 글
  • 백준 2740 < 행렬 곱셈 > JavaScript
  • 백준 2778 < 별 찍기 - 11 > JavaScript
  • 백준 4963 < 섬의 개수 > JavaScript
  • 백준 17144 < 미세먼지 안녕! > JavaScript
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (516)
      • 🎨 프론트엔드 공부 (253)
        • JS & TS (92)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
백준 2096 < 내려가기 > Python
상단으로

티스토리툴바