[TIL/크래프톤 정글] DAY 70

배재준·2025년 5월 18일

크래프톤 정글 - TIL

목록 보기
63/93
post-thumbnail

2025.05.18

TIL(TODAY I LEARN)


  • 오늘한 내용 : 파이썬 알고리즘 문제 풀이

  • WEEK 10 정글 끝까지(PintOS) - UserProgram


14613 - 너의 티어는? - 25/05/19

문제 링크 - 이동

내 코드

 import sys
 
 input = sys.stdin.readline
 
 w, l, d = map(float, input().split())
 
 dp = [[0.0 for _ in range(4001)] for _ in range(21)]
 
 dp[0][2000] = 1.0
 
 for i in range(20):
     for score in range(1000,3001,50): # 50단위로 변하는 점수들
         if dp[i][score] > 0:
             # 여러 경로를 통해 확률이 증가될 수 있으니 += 사용
             if score + 50 <= 3000:
                 dp[i+1][score + 50] += dp[i][score] * w
             dp[i+1][score] += dp[i][score] * d
             if score - 50 >= 1000:
                 dp[i+1][score - 50] += dp[i][score] * l
             
 
 print(f"{sum(dp[20][1000:1500]):.8f}")
 print(f"{sum(dp[20][1500:2000]):.8f}")
 print(f"{sum(dp[20][2000:2500]):.8f}")
 print(f"{sum(dp[20][2500:3000]):.8f}")
 print(f"{sum(dp[20][3000:3500]):.8f}")

문제를 보자마자 어떻게 풀지 생각한 문제.

혼자서 못풀고 도움을 좀 받았다.

dp 테이블 세로축 = 횟수 / 가로축 = 점수 / 값 = 확률 로 테이블을 구성한뒤

dp[0][2000] 을 1.0 으로 시작하고 횟수가 증가할 때마다 승 패 무의 확률을 갱신해준다.

출력할때도 f 포맷을 활용해 소숫점8자리까지만 표현해야하는 좀 어려웠던 문제.

그냥 DP문제는 익숙해지지가 않는다. 컴퓨터하는 사람들은 다들 천재다.

0개의 댓글