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 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]]) + + 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