From bed8fc1eb440663954e75bf7afaf458592d186e5 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 19 Apr 2025 20:37:28 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[BOJ]#1759.=20=EC=95=94=ED=98=B8=EB=A7=8C?= =?UTF-8?q?=EB=93=A4=EA=B8=B0/=EA=B3=A8=EB=93=9C5/=ED=9E=8C=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/1759 --- ...70\353\247\214\353\223\244\352\270\260.py" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\354\225\224\355\230\270\353\247\214\353\223\244\352\270\260.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\354\225\224\355\230\270\353\247\214\353\223\244\352\270\260.py" "b/Hongjoo/\353\260\261\354\244\200/\354\225\224\355\230\270\353\247\214\353\223\244\352\270\260.py" new file mode 100644 index 0000000..3b08e11 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\354\225\224\355\230\270\353\247\214\353\223\244\352\270\260.py" @@ -0,0 +1,44 @@ +""" +https://www.acmicpc.net/problem/1759 + +4 6 +a t c i s w +['a', 'c', 'i', 's', 't', 'w'] +- 문자 C 가지로 서로 다른 L개의 문자로 이뤄진 비번 +- 비번은 최소 1개의 모음 , 최소 2개의 자음 +- 정렬된 문자열 +- goal) 모든 경우의 수 + +# 1. 문자 정렬 + 모음 . 자음 나눠두기 +# 2. 중복 x 일반 조합 ? (Backtraking) +# 중복x , 순서 x , (조합) + +""" +L , C = map(int,input().split()) +arr = sorted(list(input().split())) # 전체 정렬 + +# print(f"1 -{arr}") +result = [""] * L +# print(arr) +# 전체 l 경우에서 c 개 조합 +def backtracking(c , l , level , idx) : + if level == l : + a = 0 ; b = 0 + # print(f"result {result}") + for k in range(l) : + if result[k] in [ "a" , "e" , "i" ,"o" ,"u"]: + a +=1 + else : + b += 1 + if a >= 1 and b >= 2 : + print("".join(result)) + + return + for s in range(idx , c) : + + result[level] = arr[s] + backtracking(c,l,level+1, s+1) + + + +backtracking(C , L , 0,0) \ No newline at end of file From fc76ef64f1fa1648932e69a8f9f2df18ad6377a4 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 19 Apr 2025 20:37:49 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[BOJ]#2156.=20=ED=8F=AC=EB=8F=84=EC=A3=BC?= =?UTF-8?q?=EC=8B=9C=EC=8B=9D/=EC=8B=A4=EB=B2=841/=ED=9E=8C=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/2156 --- ...04\354\243\274\354\213\234\354\213\235.py" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\355\217\254\353\217\204\354\243\274\354\213\234\354\213\235.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\355\217\254\353\217\204\354\243\274\354\213\234\354\213\235.py" "b/Hongjoo/\353\260\261\354\244\200/\355\217\254\353\217\204\354\243\274\354\213\234\354\213\235.py" new file mode 100644 index 0000000..27788a2 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\355\217\254\353\217\204\354\243\274\354\213\234\354\213\235.py" @@ -0,0 +1,33 @@ +""" +https://www.acmicpc.net/problem/2156 +# 문제 : 최대한 많은 양의 포도주 섭취 +<조건> +1. 선택한 잔의 포두주는 모두 섭취 ,마신 뒤 원상복귀 +2. 연속으로 놓여진 3잔 모두 섭취 불가 + +# 최대문제 -> "DP" + +점화식 +dp[i] : 현재 i 에서 최대 마실 수 있는 포도주 총합 +1. 현재 O , 이전 O , 전전 x : +2. 현재 , 이전 x , 전전 O = +3. 현재 x , 이전 o , 전전 o = + dp[i] = max(cups[i] + cups[i-1] + dp[i-3] , cups[i] + dp[i-2] , dp[i-1]) +""" +# 1. 입력변수 +N = int(input()) +cups = [int(input()) for _ in range(N)] + +# 2. +dp = [0]*N + +dp[0] = cups[0] +if N >=2 : + dp[1] = sum(cups[0:2]) +if N >= 3 : + dp[2] = max(cups[2] + cups[1] , cups[2] + cups[0] , dp[1]) +if N >= 4 : + for i in range(3,N): + dp[i] = max(cups[i] + cups[i-1] + dp[i-3] , cups[i] + dp[i-2] , dp[i-1]) +# print(dp) +print(dp[-1]) \ No newline at end of file From 92360871cd553e9024877c7587bc85fa517b6b90 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 19 Apr 2025 20:38:09 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[BOJ]#17484.=20=EC=A7=84=EC=9A=B0=EC=9D=98?= =?UTF-8?q?=EB=8B=AC=EC=97=AC=ED=96=89/=EC=8B=A4=EB=B2=843/=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/17484 --- ...3\213\254\354\227\254\355\226\211small.py" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211small.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211small.py" "b/Hongjoo/\353\260\261\354\244\200/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211small.py" new file mode 100644 index 0000000..5d909f1 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\354\247\204\354\232\260\354\235\230\353\213\254\354\227\254\355\226\211small.py" @@ -0,0 +1,58 @@ +""" +https://www.acmicpc.net/problem/17484 + +# 문제 +- N x M 행렬 +1. 이동 방향 - 최하 , 하 , 우하 +2. 2번 연속 동일 방향 선택 불가 +3. 반드시 달 도착 +goal ) 최소 연료 + + +""" +import sys +input = sys.stdin.readline + +n, m = map(int, input().split()) +board = [list(map(int, input().split())) for _ in range(n)] +dp = [[[0] * m for _ in range(n)] for _ in range(3)] # 3차원배열 DP +ans = sys.maxsize # 임의의 큰 값 + +for z in range(3): + for y in range(m): + dp[z][0][y] = board[0][y] # 초기 DP 초기화 + +for x in range(1, n): + for y in range(m): + if y == 0: + # 가장 첫 번째 열인 경우 + # 대각선 왼쪽 방향(dp[0])의 경우, 바로 위에서 아래 방향으로 진행하는 값만 받을 수 있음 + # 아래 방향(dp[1])의 경우, 오른쪽 위에서 왼쪽 아래 방향으로 진행하는 값만 받을 수 있음 + # 대각선 오른쪽 방향(dp[2])의 경우, 오른쪽 위에서 대각선 왼쪽 진행하는 값과 바로 위에서 아래 방향으로 진행하는 값만 받을 수 있음 + # dp[0][x][y] = dp[1][x - 1][y] + dp[1][x][y] = dp[0][x - 1][y + 1] + dp[2][x][y] = min(dp[0][x - 1][y + 1], dp[1][x - 1][y]) + elif y == m - 1: + # 가장 마지막 열인 경우 + # 대각선 왼쪽 방향(dp[0])의 경우, 바로 위에서 아래 방향으로 진행하는 값과 왼쪽 위에서 대각선 오른쪽 방향으로 진행하는 값만 받을 수 있음 + # 아래 방향(dp[1])의 경우, 왼쪽 위에서 오른쪽 아래 방향으로 진행하는 값만 받을 수 있음 + # 대각선 오른쪽 방향(dp[2])의 경우, 바로 위에서 아래 방향으로 진행하는 값만 받을 수 있음 + dp[0][x][y] = min(dp[1][x - 1][y], dp[2][x - 1][y - 1]) + dp[1][x][y] = dp[2][x - 1][y - 1] + # dp[2][x][y] = dp[1][x - 1][y] + else: + # 중간 열인 경우 + # 대각선 왼쪽 방향(dp[0])의 경우, 바로 위에서 아래 방향으로 진행하는 값과 왼쪽 위에서 대각선 오른쪽 방향으로 진행하는 값만 받을 수 있음 + # 아래 방향(dp[1])의 경우, 오른쪽 위에서 대각선 왼쪽 방향으로 진행하는 값과 왼쪽 위에서 대각선 오른쪽 방향으로 진행하는 값만 받을 수 있음 + # 대각선 오른쪽 방향(dp[2])의 경우, 오른쪽 위에서 대각선 왼쪽 방향으로 진행하는 값과 바로 위에서 아래 방향으로 진행하는 값만 받을 수 있음 + dp[0][x][y] = min(dp[1][x - 1][y], dp[2][x - 1][y - 1]) + dp[1][x][y] = min(dp[0][x - 1][y + 1], dp[2][x - 1][y - 1]) + dp[2][x][y] = min(dp[0][x - 1][y + 1], dp[1][x - 1][y]) + + for z in range(3): # 원래 자신의 좌표값 더함 + dp[z][x][y] += board[x][y] + +for z in range(3): # 3차원 배열 중 마지막 행의 최솟값을 찾음 + ans = min(ans, min(dp[z][-1])) + +print(ans) \ No newline at end of file From bec6965306a9a5ee4f628587ad230595d36b5dc3 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 19 Apr 2025 20:38:25 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[BOJ]=20#17271.=20=EB=A6=AC=EA=B7=B8?= =?UTF-8?q?=EC=98=A4=EB=B8=8C=EB=A0=88=EC=A0=84=EC=84=A4=20(small)/?= =?UTF-8?q?=EC=8B=A4=EB=B2=842/=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/17271 --- ...240\210\354\240\204\354\204\244(small).py" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\353\246\254\352\267\270\354\230\244\353\270\214\353\240\210\354\240\204\354\204\244(small).py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\353\246\254\352\267\270\354\230\244\353\270\214\353\240\210\354\240\204\354\204\244(small).py" "b/Hongjoo/\353\260\261\354\244\200/\353\246\254\352\267\270\354\230\244\353\270\214\353\240\210\354\240\204\354\204\244(small).py" new file mode 100644 index 0000000..c2a462a --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\353\246\254\352\267\270\354\230\244\353\270\214\353\240\210\354\240\204\354\204\244(small).py" @@ -0,0 +1,27 @@ +""" +https://www.acmicpc.net/problem/17271 + +# 유형 :DP +- 총 N 초 싸우는 동안 가능한 스킬 조합의 수 +- A 는 1초 , B는 M 초 준비시간 +- 시전중에 다른 스킬 사용 불가 & 스킬을 안쓰는 시간은 없음 + + + +""" +# +import sys; input = sys.stdin.readline +MOD = 1000000007 + +N, M = map(int, input().split()) + +# i초 때 가능한 경우의 수는 두 가지가 있다. +# i-1초까지 스킬 쓴 상태에서 A 스킬 사용 +# i >= M일 때, i-M초까지 스킬 쓴 상태에서 B 스킬 사용 +# dp(i) = dp(i-1) + dp(i-M) + +dp = [1] * (N + 1) +for i in range(M, N + 1): # M초 미만일 땐 dp[i] = dp[i-1]이기 때문에 무조건 1이다. + dp[i] = (dp[i - 1] + dp[i - M]) % MOD + +print(dp[N]) \ No newline at end of file From cbc84f2adf71aac709d7eb92e286a28c21221684 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 19 Apr 2025 20:38:37 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[BOJ]=20#16401.=20=EA=B3=BC=EC=9E=90?= =?UTF-8?q?=EB=82=98=EB=88=A0=EC=A3=BC=EA=B8=B0=20/=EC=8B=A4=EB=B2=842/?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.acmicpc.net/problem/16401 --- ...30\353\210\240\354\243\274\352\270\260.py" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\352\263\274\354\236\220\353\202\230\353\210\240\354\243\274\352\270\260.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\352\263\274\354\236\220\353\202\230\353\210\240\354\243\274\352\270\260.py" "b/Hongjoo/\353\260\261\354\244\200/\352\263\274\354\236\220\353\202\230\353\210\240\354\243\274\352\270\260.py" new file mode 100644 index 0000000..98ccb80 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\352\263\274\354\236\220\353\202\230\353\210\240\354\243\274\352\270\260.py" @@ -0,0 +1,38 @@ +""" +https://www.acmicpc.net/problem/16401 +실버2 + +# 조건 +- 무조건 같은 길이 ㅢ 과자 +#문제 +- M명의 조카 , N 개의 과자 -> 1명에게 줄 수 잇는 최대길이 +- 과자는 길이와 상관 없이 여러조각 나눠질 수 있음+ 하나로 합칠 수 없음 , 길이는 양수 +# 유형 : + +""" +import sys +m,n=map(int,sys.stdin.readline().split()) +snack=list(map(int,sys.stdin.readline().split())) + +start=1 #적어도 길이1로 잘라야 함. +end=max(snack) #자르는 길이의 최대는 과자 중 제일 긴 놈 + +answer=0 +while start<=end: + mid=(start+end)//2 + + cnt=0 + for x in snack: + if x=m: #cnt가 너무 많으면 길이를 늘려야 함. + start=mid+1 + answer=mid + else: #cnt가 너무 적으면 길이를 줄여야 함 + end=mid-1 + +print(answer) +