반응형
롯데V3
롯데 우승하는 그날까지 개발...ing
롯데V3
전체 방문자
오늘
어제
  • 분류 전체보기 (216)
    • Computer Science (0)
      • 운영체제 (0)
    • Problem Solving (160)
      • 프로그래머스 (93)
      • 백준 (60)
      • 리트코드 (2)
      • SQL (5)
    • 언어 (8)
      • 파이썬 (8)
    • 취준 (1)
      • 합격후기 (1)
    • 도서 리뷰 (21)
      • IT 도서 리뷰 (20)
      • 기타 도서 리뷰 (1)
    • 논문 리뷰 (1)
    • 회고 (5)
      • TIL (5)
    • 머신러닝 (9)
      • 통계 (3)
      • 전처리 (1)
      • 클러스터링 (3)
    • 딥러닝 (3)
      • 자연어처리 (1)
      • LLM (1)
    • 프로젝트 (5)
    • Util (0)
    • Tool (1)
      • Poetry (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 티스토리챌린지
  • DP

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
롯데V3

롯데 우승하는 그날까지 개발...ing

도둑질 - 파이썬(Python)
Problem Solving/프로그래머스

도둑질 - 파이썬(Python)

2023. 5. 15. 18:57
728x90
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42897#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명

도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다.

각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다.

각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요.


제한사항

  • 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다.
  • money 배열의 각 원소는 0 이상 1,000 이하인 정수입니다.

입출력 예

money return
[1, 2, 3, 1] 4

 


풀이 과정

  • 대놓고 dp 문제
  • 주의할 점 2가지
    • 처음과 마지막도 연결되어 있으므로 처음이 털린 경우와 안털린 경우 나눠서 진행
    • 연속으로 안털수도 있으므로 max_value를 누적해서 고려해준다.

정답

def solution(money):
    answer = 0
    
    n = len(money)
    
    # 처음 터는 경우
    dp = [[0,0] for _ in range(n)]
    dp[0][1] = money[0]
    max_value = 0
    for idx in range(1, n):
        dp[idx][0] = max(dp[idx-1][1], max_value)
        dp[idx][1] = dp[idx-1][0] + money[idx]
        max_value = max(max_value, max(dp[idx]))
    
    answer = max(answer, dp[-1][0])

    # 처음 안터는 경우
    dp = [[0,0] for _ in range(n)]
    max_value = 0
    for idx in range(1, n):
        dp[idx][0] = max(dp[idx-1][1], max_value)
        dp[idx][1] = dp[idx-1][0] + money[idx]
        max_value = max(max_value, max(dp[idx]))
        
    answer = max(answer, max(dp[-1]))  
        
    return answer
728x90
반응형
저작자표시 (새창열림)

'Problem Solving > 프로그래머스' 카테고리의 다른 글

이진 변환 반복하기 - 파이썬(Python)  (0) 2023.05.15
거스름돈 - 파이썬(Python)  (0) 2023.05.15
연속 펄스 부분 수열의 합 - 파이썬(Python)  (0) 2023.05.15
영어 끝말잇기 - 파이썬(Python)  (0) 2023.05.15
할인 행사 - 파이썬(Python)  (0) 2023.05.15
    'Problem Solving/프로그래머스' 카테고리의 다른 글
    • 이진 변환 반복하기 - 파이썬(Python)
    • 거스름돈 - 파이썬(Python)
    • 연속 펄스 부분 수열의 합 - 파이썬(Python)
    • 영어 끝말잇기 - 파이썬(Python)
    롯데V3
    롯데V3

    티스토리툴바