RIEN😚
이상한 나라의 개발자
RIEN😚
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Algorithm (68)
      • 알고리즘 (0)
      • Baekjoon (8)
      • 프로그래머스 (55)
      • HackerRank (5)
    • Android (30)
      • Project (1)
      • Error (2)
      • Studio (1)
      • Android (26)
    • Kotlin (6)
    • CS (4)
      • 네트워크 (2)
      • 데이터베이스 (2)
    • Front End (5)
      • React (1)
      • VUE (3)
      • Project (0)
      • 기타 (1)
    • 기록 (11)
      • 회고록 (6)
      • TIL (5)

블로그 메뉴

  • Github🔥
  • 포트폴리오🌹

공지사항

인기 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
RIEN😚

이상한 나라의 개발자

Algorithm/프로그래머스

[프로그래머스 > Lv3] 연속 펄스 부분 수열의 합

2023. 3. 5. 14:01
728x90
반응형
 

프로그래머스

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

programmers.co.kr

 

1. 문제

[입력]

정수 수열 sequence

 

[출력]

연속 펄스 부분 수열의 합 중 가장 큰 것을 return

 

2. 풀이

이 문제의 키 포인트는 연속 부분 수열이라는 점입니다.

따라서 최대 부분 수열의 합은

  • 자신이 연속 부분 수열의 포함이 되는 경우
  • 자신이 연속 부분 수열의 첫 원소인 경우

위 두 가지 경우 중 큰 값임을 알 수 있습니다.

 

이를 코드로 표현하면 👇🏻 아래와 같습니다.

dp = [0] * len(sequence)
dp[0] = sequence[0]
for i in range(1, len(sequence)):
	pos = sequence[i]
    # dp[i-1] + pos : 자신이 부분 수열에 포함되어 있는 경우
    # pos : 자신이 부분 수열의 첫 원소인 경우
    dp[i] = max(dp[i-1]+pos, pos)

그럼 이제 부분 수열을 구하는 방법을 알았으니, 해당 코드에 펄스를 적용해주어야 합니다.

 

부분 수열의 최대 합을 구하는 것이기 때문에 아래 2개의 배열을 만들어둔다면

특정 index에서 1 또는 -1 로 시작하는 연속 펄스 수열을 만들 수 있습니다. 🤗👍🏻

따라서 1로 시작하는 펄수 수열에서의 최대 수열 합과 -1로 시작하는 펄수 수열에서의 최대 수열 합 중 큰 값을

결과값으로 반환해주면 됩니다. 🪴

 

3. 코드

Python
def solution(sequence):
    return max(solve(sequence,1),solve(sequence,-1))

def solve(sequence,pulse):
    dp = [0] * len(sequence)
    dp[0] = sequence[0] * pulse
    for i in range(1, len(sequence)):
        pulse *= -1
        pos = sequence[i] * pulse
        dp[i] = max(dp[i-1]+pos, pos)
    
    return max(dp)
반응형

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

[프로그래머스 > Lv4] 블록 게임  (0) 2023.03.07
[프로그래머스 > Lv4] 징검다리  (0) 2023.03.06
[프로그래머스 > Lv1] 바탕화면 정리  (0) 2023.03.04
[프로그래머스 > Lv1] 대충 만든 자판  (0) 2023.03.04
[프로그래머스 > Lv2] 덧칠하기  (0) 2023.03.04
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [프로그래머스 > Lv4] 블록 게임
    • [프로그래머스 > Lv4] 징검다리
    • [프로그래머스 > Lv1] 바탕화면 정리
    • [프로그래머스 > Lv1] 대충 만든 자판
    RIEN😚
    RIEN😚
    안드로이드 / 코틀린 독학으로 취업하자!

    티스토리툴바