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 | 29 | 30 |
Tags
- docker m2
- nestjs
- ECS
- 라즈베리바이4 mongo
- mysql index 속도차이
- index like
- kubernetes
- github accesstoken
- 개발자 회고록
- mongo 4.4
- aws m2
- git
- 밸런스 게임
- 회고록
- 신입 개발자 면접
- token 탈취
- OSI 7계층
- 신입 면접 팁
- mongo 4.4.18
- 개발자 취업 준비
- 쿠버네티스
- index in
- 팩토리 패턴 예제
- 개발자 전직
- VUE
- 개발자 면접 팁
- 팩토리 패턴 언제
- 인텔리제이 github 로그인
- 퇴사
- mysql like
Archives
- Today
- Total
주니어 개발자 1호
알고리즘 스터디 3주차 마무리 [dp] 본문
백준 문제
3주차 목표:
백준 1463, 11726, 11727, 9095, 10844, 11057, 2193, 9465, 2156, 11053, 11055, 11722, 11054, 1912, 2579, 1699, 2133, 9461, 2225, 2011, 11052
1463
n = int(input())
# 최대 수 제한
d = [0] * 1000001
d[0] = 0
d[1] = 0
d[2] = 1
d[3] = 1
for i in range(2, n+1):
# 2와 3으로 나누어 떨어지지 않는 경우 ( -1 에 대한 연산만 수행 )
d[i] = d[i-1] + 1
print('-------')
print('index: ', i, 'value: ', d[i]);
# 2로 나누어 떨어지는 경우와 3으로 나누어 떨어지지 않는 경우 중 최솟값을 선택
# 2로 나누어 떨어지는 경우
if i % 2 == 0:
print('index: ', i, 'd[i//2]: ', d[i//2], 'd[i//2] + 1: ', d[i//2] + 1);
d[i] = min(d[i], d[i//2] + 1)
# 3으로 나누어 떨어지는 경우
# 3이 2보다 우선순위가 높기 때문에 2로 나누어 떨어지는 경우와 동시에 3으로 나누어 떨어지는 경우가 존재할 수 있음
if i % 3 == 0:
print('index: ', i, 'd[i//3]: ', d[i//3], 'd[i//3] + 1: ', d[i//3] + 1);
d[i] = min(d[i], d[i//3] + 1)
print(d[n])
출력 예시
#입력값: 7
-------
index: 2 value: 1
index: 2 d[i//2]: 0 d[i//2] + 1: 1
-------
index: 3 value: 2
index: 3 d[i//3]: 0 d[i//3] + 1: 1
-------
index: 4 value: 2
index: 4 d[i//2]: 1 d[i//2] + 1: 2
-------
index: 5 value: 3
-------
index: 6 value: 4
index: 6 d[i//2]: 1 d[i//2] + 1: 2
index: 6 d[i//3]: 1 d[i//3] + 1: 2
-------
index: 7 value: 3
11726
n = int(input())
#11726 백준
# 2xn 타일링
d = [0] * 1001
# 기본 값 세팅 ( 반복전, 연산에 필요한 기본값을 저장해 줌 )
d[1] = 1
d[2] = 2
for i in range(3, n+1):
d[i] = d[i-1] + d[i-2]
# 10007은 소수이기 때문에 나누어 떨어지는 수가 없음
print(d[n] % 10007)
11727
# 11727 백준
n = int(input())
d = [0] * 1001
d[1] = 1
d[2] = 3
d[3] = 5
for i in range(4, n+1):
d[i] = d[i-1] + d[i-2] * 2;
print(d[n] % 10007)
9095
T = int(input())
d = [0] * 11
d[1] = 1
d[2] = 2
d[3] = 4
for i in range(4,11):
d[i] = d[i-3] + d[i-2] + d[i-1]
for i in range(0,T):
n = int(input())
print(d[n])
10844
# 풀지 못함
11057
n = int(input())
dp = [1]*10
for i in range(1,n) :
for j in range(1,10) :
dp[j] += dp[j-1]
print(sum(dp)%10007)
2193
n = int(input())
dp = [0] * 91
dp[1] = 1
dp[2] = 1
for i in range(2, n + 1):
dp[i] = dp[i - 2] + dp[i - 1]
print(dp[n])
9465
# 풀지 못함..
'일상' 카테고리의 다른 글
최근, 발표 준비를 하고 있습니다. (0) | 2023.05.17 |
---|---|
알고리즘 스터디 ( dp 에 대해 1주 연장 ) (0) | 2023.03.12 |
알고리즘 스터디 1주차 마무리 (0) | 2023.02.19 |
알고리즘 유형과 예제 [ w. 알고리즘 스터디 시작 ] (0) | 2023.02.11 |
주니어 개발자의 우당탕탕 이직기 (4) | 2023.01.14 |