백준 19622 - 회의실 배정 3

Computer Science/Problem Solving

문제설명

제한사항 및 입출력

 

풀이

문제를 잘 읽어보면 제한사항에 k번째 회의는 k-1, k+1과 겹치지만 다른 회의랑은 겹치지 않는다는 것을 알 수 있다. 해당 조건으로 회의의 시작 시간, 종료 시간은 필요가 없어지는 정보가 된다. 핵심은 인접한 것을 선택하지 못한다는 것이다.

 

기초적인 dp 문제라고 생각했다. 현재 값을 선택하거나, 선택하지 않거나.

dp[i] = i번째 회의까지 진행했을 때 최대 인원

상태전이: max(해당 회의를 선택했다면 i-2 + 현재, 해당 회의를 선택하지 않았다면 i-1)

내 코드

import sys
input = sys.stdin.readline
mis = lambda: map(int, input().split())

n = int(input())
num = []
for _ in range(n):
    num.append([*mis()][2])

dp = [0] * n
dp[0] = num[0]
if n == 1:
    print(dp[-1])
    exit()
dp[1] = max(num[0], num[1])
for i in range(2, n):
    dp[i] = max(dp[i-1], dp[i-2] + num[i])

print(dp[-1])

 

고찰

복잡하다면 2차원 dp로도 풀이할 수 있다. 

 

dp테이블 정의

dp[i][0] = i번째 회의를 선택한 경우 최댓값

dp[i][1] = i번째 회의를 선택하지 않은 경우 최댓값

 

상태전이

dp[i][0] = 이전 회의를 선택하지 않은 경우 + 현재 회의를 선택한 경우

dp[i][1] = max(이전 회의를 선택한 경우, 이전 회의를 선택하지 않은 경우)

 

개인적으로는 2차원 테이블을 사용하는 것이 이전의 최댓값을 직관적으로 식별하기 더 편한 것 같아 좀 더 직관적이라고 생각한다.

n = int(input())
num = []
for _ in range(n):
    num.append([*mis()][2])

dp = [[0, 0] for _ in range(n)]
dp[0] = [num[0], 0]
if n == 1:
    print(max(dp[-1]))
    exit()
for i in range(1, n):
    dp[i][0] = dp[i-1][1] + num[i]
    dp[i][1] = max(dp[i-1][0], dp[i-1][1])

print(max(dp[-1]))

'Computer Science > Problem Solving' 카테고리의 다른 글

백준 23326 - 홍익 투어리스트  (0) 2025.08.19
백준 13265 - 색칠하기  (0) 2025.08.18
백준 15973 - 두 박스  (0) 2025.08.18
백준 9047 - 6174  (0) 2025.08.17
프로그래머스 - 피로도  (0) 2025.08.17
'Computer Science/Problem Solving' 카테고리의 다른 글
  • 백준 13265 - 색칠하기
  • 백준 15973 - 두 박스
  • 백준 9047 - 6174
  • 프로그래머스 - 피로도
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (82)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (66)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (13)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (2)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    19622
    리버싱 핵심원리
    servlet
    HTTP
    레나 튜토리얼
    12033
    21278
    9421
    DB
    Header
    n+1
    n^2 배열 자르기
    dreamhack.io
    2539
    bean
    x64dbg
    Spring boot
    자료구조
    DP
    백준
    프로그래머스
    리버싱
    소수상근수
    16946
    Reversing
    PE header
    Lena tutorial
    13265
    서버 증설 횟수
    15973
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
백준 19622 - 회의실 배정 3
상단으로

티스토리툴바