From 3283575d32df90f10a65e7c5bc08faaa0f77c4d4 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 26 Apr 2025 23:31:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[BOJ]#2470.=20=EB=91=90=20=EC=9A=A9?= =?UTF-8?q?=EC=95=A1/=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/2470 --- .../\353\221\220\354\232\251\354\225\241.py" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\353\221\220\354\232\251\354\225\241.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\353\221\220\354\232\251\354\225\241.py" "b/Hongjoo/\353\260\261\354\244\200/\353\221\220\354\232\251\354\225\241.py" new file mode 100644 index 0000000..487f16c --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\353\221\220\354\232\251\354\225\241.py" @@ -0,0 +1,57 @@ +""" +https://www.acmicpc.net/problem/2470 + +# 음 - 염 / 양 - 산성 +goal) 2개 혼합 -> 0에 가장 가까운 두 용액 찾기 +# 출력 + - 2개 오름차순 출력 + - 경우가 2개 이상이면 둘중에 1개 아무거나 +# flow +1. 오름차순 정렬 +2. 2개가 +- 조합인 경우 => 양끝에 투 포인터..? + => [-99,-2,-1,4,98] + start end + #2-1. 둘 간 합이 기존 min보다 작으면 -> 업데이트 + # start와 end의 절대값 크기 차이를 기준으로 포인터가 이동함 + if abs(arr[start]) > abs(arr[end]) => start += 1 이동 , end 유지 + elif # end -= 1 이동 + else : #같으면 + break #끝 + + + # until : start = end 가 같은 idx를 가르키면 (start >= end) + + + +2. 2개가 ++ 조합 => + 중 최소값 2개의 합 +3. 2개가 -- 조합 => -중 최대값 2개의 합 +=> 3개 비교 후 가장 0에 가까운 값 찾기 + """ + +import sys +N = int(sys.stdin.readline()) +liqs = sorted(list(map(int, sys.stdin.readline().split()))) + +# print(liqs) +# 1. +- 의 조합 +start = 0 ; end = len(liqs)-1 +closed_z = [start,end,abs(liqs[start] + liqs[end])] +while start < end : + c = liqs[start] + liqs[end] + if closed_z[-1] > abs(c) : + closed_z = [start,end, abs(c)] + if c == 0 : + break + # print(f"##") + # print(f"# {c} : {closed_z} = {liqs[start]} / {liqs[end]}") + + if abs(liqs[start]) > abs(liqs[end]) : + start+= 1 + # elif abs(liqs[start]) < abs(liqs[end]) : + else : + end -=1 + + +print(liqs[closed_z[0]] , liqs[closed_z[1]]) + + From 467a01c9946b7f331563e3a5220968767f0afdc4 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 26 Apr 2025 23:31:54 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[BOJ]#28069.=20=EA=B9=80=EB=B0=A5=EC=B2=9C?= =?UTF-8?q?=EA=B5=AD=EC=9D=98=20=EA=B3=84=EB=8B=A8/=EA=B3=A8=EB=93=9C5/?= =?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/28069 --- ...55\354\235\230\352\263\204\353\213\250.py" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\352\271\200\353\260\245\354\262\234\352\265\255\354\235\230\352\263\204\353\213\250.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\352\271\200\353\260\245\354\262\234\352\265\255\354\235\230\352\263\204\353\213\250.py" "b/Hongjoo/\353\260\261\354\244\200/\352\271\200\353\260\245\354\262\234\352\265\255\354\235\230\352\263\204\353\213\250.py" new file mode 100644 index 0000000..20f812c --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\352\271\200\353\260\245\354\262\234\352\265\255\354\235\230\352\263\204\353\213\250.py" @@ -0,0 +1,50 @@ +""" +https://www.acmicpc.net/problem/28069 + +- 0 ~ N-1 번 계단 옆에 목표 김밥집 +- 2가지 중 택 1을 K번 반복하여 김밥집(=N) 에 도달하자 + + (1) nex_i = 계단 +1 + (2) nex_i = i + i//2 +-> goal)K번 행동으로 0 -> N 까지 도달 여부 확인하기 +(1<=n<=1000000) +# 유형 : 그래프 탐색 - DFS/BFS +- 목적지 "K" 까지 도달 여부 확인 + +# 출력 +김밥 도달 = minigimbob +물 = water + +# 풀이 renewal : BFS는 시간 초과난다고 하고, 횟수 count 를 어떻게 해야할지 모르겠다 +# 보편적 풀이인 DP 로 간다 +- 점화식 + + +""" +import sys +from collections import deque +#1. 입력 변수 +N , K = map(int, sys.stdin.readline().split()) +# DP +INF = 1e9 +dp = [INF] * (N+1) + +dp[0] = 0 +dp[1] = 1 # 1 = 0+1 1가지 밖에 없음 + +""" +dp[i] : 현재 i 도달하는데 최소 횟수 +dp[i+1] = min(dp[i+1] , dp[i]+1) # 유지 , 업데이트 +dp[i + i//2] = min(dp[i+i//2] , dp[i]+1) +""" + +for i in range(1,N+1): + if i+1 <= N : + dp[i+1] = min(dp[i+1] , dp[i]+1) + if i+i//2 <= N : #순간이동 가능한 경우 + dp[i + i//2] = min(dp[i+i//2] , dp[i]+1) + +if dp[N] <= K : + print("minigimbob") +else : + print("water") \ No newline at end of file From 9a558c64c09f2c0887f2c45a3483d55d7ce1e51b Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sat, 26 Apr 2025 23:32:02 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[BOJ]#2473.=20=EC=84=B8=20=EC=9A=A9?= =?UTF-8?q?=EC=95=A1/=EA=B3=A8=EB=93=9C3/=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/2473 --- .../\354\204\270\354\232\251\354\225\241.py" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Hongjoo/\353\260\261\354\244\200/\354\204\270\354\232\251\354\225\241.py" diff --git "a/Hongjoo/\353\260\261\354\244\200/\354\204\270\354\232\251\354\225\241.py" "b/Hongjoo/\353\260\261\354\244\200/\354\204\270\354\232\251\354\225\241.py" new file mode 100644 index 0000000..8d661c5 --- /dev/null +++ "b/Hongjoo/\353\260\261\354\244\200/\354\204\270\354\232\251\354\225\241.py" @@ -0,0 +1,65 @@ +""" +https://www.acmicpc.net/problem/2473 +# 두용액 -> 3용액 +# 포인트 +#flow +x<= y<= z 일떄 +(1) (x,y) 의 모든 조합 +(2)z 는 y+1 ~ N 번째 중 x+y+z -> 0 인 숫자 구하기 +#ME +(1) Start idx = 0 , end _iex =-1 +(2) middle : for문으로 start+1 : end 내 값 중 -(start+end)과 가장 가까운 값 ? +(3) start + end + miidle 합과 기존 최소값 비교하기 + +4 +1 2 3 4 + +4 +-1 -2 -3 -4 + +4 +-2 -1 1 2 + +# 0 가능 +6 +-10 0 2 3 4 8 +=> -10 2 8 + +""" + + +import sys + +INF = 1e12 +N = int(sys.stdin.readline()) +arr = sorted(list(map(int, sys.stdin.readline().split()))) +#1. 오름차순 정렬 과 포인트 초기화 + +total_min = INF +answer = [] +# print(f"arr {arr}") +# 2. 투 포인터 +# x < y0 : + zp-=1 + else : # xyz_sum == 0 + print(" ".join(map(str,answer))) + sys.exit() + + + +str_answer = " ".join(map(str,answer)) +print(str_answer) \ No newline at end of file