File tree Expand file tree Collapse file tree 3 files changed +172
-0
lines changed
Expand file tree Collapse file tree 3 files changed +172
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ https://www.acmicpc.net/problem/28069
3+
4+ - 0 ~ N-1 번 계단 옆에 목표 김밥집
5+ - 2가지 중 택 1을 K번 반복하여 김밥집(=N) 에 도달하자
6+
7+ (1) nex_i = 계단 +1
8+ (2) nex_i = i + i//2
9+ -> goal)K번 행동으로 0 -> N 까지 도달 여부 확인하기
10+ (1<=n<=1000000)
11+ # 유형 : 그래프 탐색 - DFS/BFS
12+ - 목적지 "K" 까지 도달 여부 확인
13+
14+ # 출력
15+ 김밥 도달 = minigimbob
16+ 물 = water
17+
18+ # 풀이 renewal : BFS는 시간 초과난다고 하고, 횟수 count 를 어떻게 해야할지 모르겠다
19+ # 보편적 풀이인 DP 로 간다
20+ - 점화식
21+
22+
23+ """
24+ import sys
25+ from collections import deque
26+ #1. 입력 변수
27+ N , K = map (int , sys .stdin .readline ().split ())
28+ # DP
29+ INF = 1e9
30+ dp = [INF ] * (N + 1 )
31+
32+ dp [0 ] = 0
33+ dp [1 ] = 1 # 1 = 0+1 1가지 밖에 없음
34+
35+ """
36+ dp[i] : 현재 i 도달하는데 최소 횟수
37+ dp[i+1] = min(dp[i+1] , dp[i]+1) # 유지 , 업데이트
38+ dp[i + i//2] = min(dp[i+i//2] , dp[i]+1)
39+ """
40+
41+ for i in range (1 ,N + 1 ):
42+ if i + 1 <= N :
43+ dp [i + 1 ] = min (dp [i + 1 ] , dp [i ]+ 1 )
44+ if i + i // 2 <= N : #순간이동 가능한 경우
45+ dp [i + i // 2 ] = min (dp [i + i // 2 ] , dp [i ]+ 1 )
46+
47+ if dp [N ] <= K :
48+ print ("minigimbob" )
49+ else :
50+ print ("water" )
Original file line number Diff line number Diff line change 1+ """
2+ https://www.acmicpc.net/problem/2470
3+
4+ # 음 - 염 / 양 - 산성
5+ goal) 2개 혼합 -> 0에 가장 가까운 두 용액 찾기
6+ # 출력
7+ - 2개 오름차순 출력
8+ - 경우가 2개 이상이면 둘중에 1개 아무거나
9+ # flow
10+ 1. 오름차순 정렬
11+ 2. 2개가 +- 조합인 경우 => 양끝에 투 포인터..?
12+ => [-99,-2,-1,4,98]
13+ start end
14+ #2-1. 둘 간 합이 기존 min보다 작으면 -> 업데이트
15+ # start와 end의 절대값 크기 차이를 기준으로 포인터가 이동함
16+ if abs(arr[start]) > abs(arr[end]) => start += 1 이동 , end 유지
17+ elif # end -= 1 이동
18+ else : #같으면
19+ break #끝
20+
21+
22+ # until : start = end 가 같은 idx를 가르키면 (start >= end)
23+
24+
25+
26+ 2. 2개가 ++ 조합 => + 중 최소값 2개의 합
27+ 3. 2개가 -- 조합 => -중 최대값 2개의 합
28+ => 3개 비교 후 가장 0에 가까운 값 찾기
29+ """
30+
31+ import sys
32+ N = int (sys .stdin .readline ())
33+ liqs = sorted (list (map (int , sys .stdin .readline ().split ())))
34+
35+ # print(liqs)
36+ # 1. +- 의 조합
37+ start = 0 ; end = len (liqs )- 1
38+ closed_z = [start ,end ,abs (liqs [start ] + liqs [end ])]
39+ while start < end :
40+ c = liqs [start ] + liqs [end ]
41+ if closed_z [- 1 ] > abs (c ) :
42+ closed_z = [start ,end , abs (c )]
43+ if c == 0 :
44+ break
45+ # print(f"##")
46+ # print(f"# {c} : {closed_z} = {liqs[start]} / {liqs[end]}")
47+
48+ if abs (liqs [start ]) > abs (liqs [end ]) :
49+ start += 1
50+ # elif abs(liqs[start]) < abs(liqs[end]) :
51+ else :
52+ end -= 1
53+
54+
55+ print (liqs [closed_z [0 ]] , liqs [closed_z [1 ]])
56+
57+
Original file line number Diff line number Diff line change 1+ """
2+ https://www.acmicpc.net/problem/2473
3+ # 두용액 -> 3용액
4+ # 포인트
5+ #flow
6+ x<= y<= z 일떄
7+ (1) (x,y) 의 모든 조합
8+ (2)z 는 y+1 ~ N 번째 중 x+y+z -> 0 인 숫자 구하기
9+ #ME
10+ (1) Start idx = 0 , end _iex =-1
11+ (2) middle : for문으로 start+1 : end 내 값 중 -(start+end)과 가장 가까운 값 ?
12+ (3) start + end + miidle 합과 기존 최소값 비교하기
13+
14+ 4
15+ 1 2 3 4
16+
17+ 4
18+ -1 -2 -3 -4
19+
20+ 4
21+ -2 -1 1 2
22+
23+ # 0 가능
24+ 6
25+ -10 0 2 3 4 8
26+ => -10 2 8
27+
28+ """
29+
30+
31+ import sys
32+
33+ INF = 1e12
34+ N = int (sys .stdin .readline ())
35+ arr = sorted (list (map (int , sys .stdin .readline ().split ())))
36+ #1. 오름차순 정렬 과 포인트 초기화
37+
38+ total_min = INF
39+ answer = []
40+ # print(f"arr {arr}")
41+ # 2. 투 포인터
42+ # x < y<z 일때 - X 는 fix , y,z는 투 포인터
43+ for i in range (N - 2 ):
44+ x = arr [i ]
45+ yp = i + 1
46+ zp = N - 1
47+ while yp < zp :
48+ xyz_sum = x + arr [yp ] + arr [zp ]
49+ #결과값 업데이트
50+ if abs (xyz_sum ) < total_min : # 업데이트
51+ answer = [x ,arr [yp ],arr [zp ]]
52+ total_min = abs (xyz_sum )
53+ # 포인터 이동
54+ if xyz_sum < 0 :
55+ yp += 1
56+ elif xyz_sum > 0 :
57+ zp -= 1
58+ else : # xyz_sum == 0
59+ print (" " .join (map (str ,answer )))
60+ sys .exit ()
61+
62+
63+
64+ str_answer = " " .join (map (str ,answer ))
65+ print (str_answer )
You can’t perform that action at this time.
0 commit comments