Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Brigthics를 이용한 분석
- 모델링
- 혼공
- 직원 이직여부
- 삼성SDS Brigthics
- 영상제작기
- 개인 의료비 예측
- 삼성SDS
- 캐글
- 혼공머신러닝딥러닝
- 혼공머신
- 포스코 아카데미
- 삼성 SDS
- 브라이틱스 서포터즈
- 직원 이직률
- 포스코 청년
- 삼성SDS Brightics
- 혼공학습단
- 데이터분석
- 삼성 SDS Brigthics
- Brightics를 이용한 분석
- Brigthics
- 추천시스템
- Brightics
- 노코드AI
- 데이터 분석
- Brigthics Studio
- 브라이틱스
- 팀 분석
- Brightics Studio
Archives
- Today
- Total
데이터사이언스 기록기📚
[프로그래머스/Python] Level 3_스티커 모으기(2) 본문
📌문제 유형
DP
📌문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌나의 문제풀이
- 실패
- len(sticker) 짝수 : 인덱스 홀수, 인덱스 짝수 더해서 큰 값
- len(sticker) 홀수 : 시작점 선정 + len(sticker) 짝수 방법 반복
-> 다른 숫자 대비, 엄청 큰 숫자가 있는 경우 안될 것이라는 판단
import copy
def solution(sticker):
answer = 0
tmp, tmp_0, tmp_1 = 0, 0, 0
# 짝수 - 최대 5만번
if len(sticker) % 2 == 0:
for i in range(0,len(sticker),2):
tmp_0 += sticker[i]
tmp_1 += sticker[i+1]
if tmp_0 < tmp_1:
answer = tmp_1
else:
answer = tmp_0
# 홀수
else:
for j in range(len(sticker)):
tmp = sticker[j]
tmp_list = copy.deepcopy(sticker)
if j == 0:
del tmp_list[-1]
del tmp_list[j: j+2]
elif j == len(sticker)-1:
del tmp_list[j-1:]
del tmp_list[0]
elif j == len(sticker)-2:
del tmp_list[j-1:]
else:
del tmp_list[j-1: (j+2) % len(sticker)] # 인덱스 3일때 오류
# print(tmp, tmp_list)
tmp_0, tmp_1 = 0, 0
for l in range(0,len(tmp_list),2):
tmp_0 += tmp_list[l]
tmp_1 += tmp_list[l+1]
tmp_0 += tmp
tmp_1 += tmp
if answer < tmp_1:
answer = tmp_1
elif answer < tmp_0:
answer = tmp_0
return answer
📌다른사람의 문제풀이
- 결국 답은 DP
- 관련 설명은 하단 블로그 참조
velog
velog.io
def solution(sticker):
if len(sticker) == 1:
return sticker[0]
dp = [0 for _ in range(len(sticker))] # use first sticker
dp2 = [0 for _ in range(len(sticker))] # unused first sticker
dp[0] = sticker[0]
dp[1] = sticker[0]
dp2[0] = 0
dp2[1] = sticker[1]
# 첫번째 스티커를 사용했을 경우, 맨 끝 스티커 사용 못함
for i in range(2, len(sticker) - 1):
dp[i] = max(dp[i - 2] + sticker[i], dp[i - 1])
value_1 = max(dp)
for i in range(2, len(sticker)):
dp2[i] = max(dp2[i - 2] + sticker[i], dp2[i - 1])
value_2 = max(dp2)
answer = max(value_1,value_2)
return answer
📌리뷰
- 경우의 수가 많다고 판단될때는 DP 한 번 생각해보기
728x90
'Coding Test > 프로그래머스(Python)' 카테고리의 다른 글
[프로그래머스/Python] Level 3_보석 쇼핑 (0) | 2024.02.16 |
---|---|
[프로그래머스/Python] Level 3_불량 사용자 (0) | 2024.02.10 |
[프로그래머스/Python] Level 3_베스트앨범(해시) (0) | 2024.02.05 |
[프로그래머스/Python] Level 3_최고의 집합(연습문제) (0) | 2024.02.03 |
[프로그래머스/Python] Level 3_최고의 집합(연습문제) (0) | 2024.02.02 |
Comments