Skip to content

Commit 4c26858

Browse files
committed
2 parents 4856743 + 3ccaa65 commit 4c26858

26 files changed

+771
-0
lines changed

.DS_Store

0 Bytes
Binary file not shown.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""
2+
6/range(1,45+1)
3+
최고 순위, 최저 순위
4+
1. 알수 없는 번호 개수: 0의 개수 => unknown_n
5+
2. 최저 순위 = 6- (1개,0개 == 0 개로 취급, 현재 맞는 개수)
6+
3. 최고 순위 = 6- 현재 맞은 개수
7+
"""
8+
def solution(lottos, win_nums):
9+
answer = []
10+
#1. 0의 개수
11+
correct= 0 ; unknown = 0
12+
#2. 알수 없는 개수, ,현재 맞은 개수
13+
for i in range(len(lottos)):
14+
if lottos[i] == 0 :
15+
unknown += 1
16+
elif lottos[i] in win_nums :
17+
win_nums.remove(lottos[i])
18+
correct+=1
19+
#3. 순위 = 7- 맞은 개수(1개 맞은 개수 == 0개 맞은 개수 = 1로 취급)
20+
for c in [correct+unknown,correct] :
21+
if c == 0 :
22+
c= 1
23+
rank = 7-c
24+
answer.append(rank)
25+
return answer

Hongjoo/lv2/가장큰수.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""
2+
실패
3+
1. 가장 큰 자리수 비교 -> 자리수 가장 작은 수
4+
0. graph
5+
idx : numbers
6+
value : [0,0,0,-1] # ex 62 => [6,2,False,False]
7+
# 조건 2.
8+
3,30,300 비교 -> 3 > 30> 300 우선순위
9+
#반례
10+
1) 110 vs 1 > 1+110
11+
2) [12, 1213] -> 1213+12
12+
"""
13+
14+
def solution(numbers):
15+
answer = ''
16+
#0. graph 만들기
17+
graph = list()
18+
for n in numbers:
19+
p = 4-len(str(n))
20+
if p > 0 :
21+
douple_n = str(n)*p
22+
else :
23+
douple_n = str(n)
24+
graph.append([douple_n[:4], p ]) # 자리수 맞춰주기(4자리)
25+
# print(graph)
26+
#2.정렬 : 높은 자리수의 값이 큰 순서 대로
27+
graph.sort(key=lambda x : x[0] , reverse = True)
28+
# print(graph)
29+
#3. 합치기
30+
answer=""
31+
for i in range(len(graph)):
32+
num = graph[i][0] ; position = 4-graph[i][1]
33+
answer += str(int(num[:position]))# "000","0" 경우 0으로 처리
34+
35+
return answer
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from collections import deque
2+
import copy
3+
def solution(bridge_length, weight, truck_weights):
4+
answer = 0
5+
t=0
6+
run_truck = deque() # bride 올라간 weight
7+
timeline = [[0] for _ in range(len(truck_weights))]
8+
finish =[]
9+
# 통과 조건(bridge에 있는 시간 >= bridge_length)
10+
print(len(timeline))
11+
i=0 # new truck 번호
12+
while len(finish) <= len(truck_weights)and t<len(truck_weights):
13+
t+=1 ;
14+
#2. 나가기
15+
if t==1:
16+
run_truck.append(i)
17+
timeline[i] = 1
18+
continue
19+
for r in copy.deepcopy(run_truck) :
20+
if timeline[r] > bridge_length : #내보내기
21+
run_truck.popleft()
22+
finish.append(r)
23+
print(f"out {r} ,t={timeline[r]} , run : {run_truck}")
24+
else : #충족 x
25+
timeline[r] += 1
26+
print("# , run_truck", run_truck)
27+
28+
#1. bridge 무게 조건
29+
now_weight = 0
30+
for j in copy.deepcopy(run_truck):
31+
now_weight += truck_weights[j]
32+
if now_weight + truck_weights[i] <= weight: # 올라감
33+
run_truck.append(i)
34+
timeline[i] = 1
35+
36+
return answer

Hongjoo/lv2/디펜스게임.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
def defend(use_k,n,k,enemy_i):
2+
if use_k : # use_k true
3+
return n ,k-1
4+
else : # no uese_k
5+
return n-enemy_i, k
6+
7+
def solution(n, k, enemy):
8+
answer = 0
9+
graph = [[] for _ in range(len(enemy)+1)]
10+
graph[0] =[[n,k]]
11+
#매 i 라운드 별로
12+
for i in range(len(enemy)) :
13+
# print("길이:",len(graph[i]))
14+
if len(graph[i]) == 0 : # 길이 0(중간에 끝나는 경우)
15+
# print(i-1)
16+
return i-1
17+
for r in graph[i]:
18+
input_n = r[0] ; left_k= r[1]
19+
#1-1 use k /no use k -> [남은 n, 남은 k]
20+
for use_k in [0,1]:
21+
x,y = defend(use_k,input_n,left_k,enemy[i])
22+
if x>=0 and y>=0 :
23+
graph[i+1].append([x,y])
24+
# print(f"{i+1}라운드: {[x,y]} =>{graph[i+1]}")
25+
#모든 라운드 통과
26+
answer = len(enemy)
27+
return answer
28+
29+
30+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
# 계수 정렬 idea 적용
3+
"""
4+
5+
def solution(topping):
6+
answer = 0 # 공평하게 자를 수 있는 경우의 수
7+
# 0, graph
8+
forward = set()
9+
backward = dict()
10+
# 1. key 종류, value: toppping 중복 개수
11+
for t in topping:
12+
backward[str(t)]= backward.get(str(t),0)
13+
backward[str(t)] += 1
14+
print(backward)
15+
#2. forward vs backward
16+
for t in topping :
17+
# f 에서 t가 추가됨 == b에서 t 빠짐
18+
forward.add(t)
19+
backward[str(t)] -=1
20+
if backward[str(t)] == 0 :
21+
del backward[str(t)]
22+
23+
# 토핑 종류 같은 경우 = 공평 한 경우
24+
if len(forward) == len(backward.keys()):
25+
answer+=1
26+
27+
return answer

Hongjoo/lv2/배달.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""
2+
시작 = 1
3+
if 시작 ~ # 노드(N개) 까지의 최단 거리 <= K : 배달 가능True
4+
다익스트라
5+
"""
6+
import heapq
7+
INF = 2001
8+
9+
def dikstra(graph, distance, start) :
10+
#2. distance 초기화 : (0,start)로 초기화 / q에 (0,start 넣기)
11+
q= []
12+
distance[start] = 0
13+
heapq.heappush(q,(0,start))
14+
#3. q에서 최단 거리(start -> X) & 방문x 노드 선택
15+
while q :
16+
dist , now = heapq.heappop(q) # A->X
17+
if distance[now] < dist: # 방문 완료
18+
continue
19+
#4. Cost(X->B)계산 + Cost(A->X) < Cost(A->B) => distance 업데이트 + q에 넣기
20+
# graph 인접 간선(i[1]) , dist, 현distance[B]
21+
for i in graph[now]: # i = (b,c)....
22+
cost = dist + i[1]
23+
if cost < distance[i[0]] :
24+
distance[i[0]] = cost
25+
heapq.heappush(q,(cost,i[0]))
26+
return distance
27+
28+
def solution(N, road, K):
29+
# input
30+
graph = [[] for _ in range(N+1)]
31+
distance = [INF]*(N+1) # 최단거리 그래프
32+
33+
#0 그래프 필드 정의 a : [(b,c)...] #양방향
34+
road.sort()
35+
for r in road :
36+
a=r[0] ; b = r[1] ; c= r[2]
37+
graph[a].append([b,c])
38+
graph[b].append([a,c])
39+
40+
# 다익스트라
41+
distance = dikstra(graph ,distance, 1)
42+
43+
# 거리 < K 인 마을 개수
44+
count = 0
45+
for city in range(1, N+1) :
46+
if distance[city] <= K :
47+
count+=1
48+
return count
49+

Hongjoo/lv2/최대값최소값.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def solution(s):
2+
answer = ''
3+
li = list(map(int,s.split(" ")))
4+
li.sort() # 오름 차순 정렬
5+
answer= str(li[0]) + " "+str(li[-1]) #"최소 최대"
6+
# print(answer)
7+
return answer
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""
2+
4 4 2 1 # 도시 개수 n , 도로 개수 m , 거리 정보 k , 출발 도시 번호 x
3+
1 2
4+
1 3
5+
2 3
6+
2 4 # 2~m 번 a -> b
7+
다익스트라
8+
"""
9+
import heapq
10+
#0 input
11+
INF = 20000
12+
city_count , road_count , target_km , start =map(int,input().split())
13+
14+
#1. graph 그리기 -> 인접 리스트 방식 , 최단거리 테이블
15+
graph = [[] for i in range(city_count+1) ]
16+
distance = [INF]* (city_count+1)
17+
18+
for _ in range(road_count):
19+
a,b = map(int, input().split())
20+
# a -> b ,b 는 a 에서 갈수 있는 인접한 city
21+
for j in range(len(graph)):
22+
if a == j:
23+
graph[a].append((b,1))
24+
25+
26+
# 다익스트라
27+
#1. 초기 노드 설정 #2. 최단거리 테이블 최기화
28+
q =[]
29+
distance[start]=0
30+
heapq.heappush(q, (0,start))
31+
# 2. 최단 거리(heappop) & 방문 x 노드 선택
32+
while q :
33+
dist , now = heapq.heappop(q)
34+
if distance[now] < dist :
35+
continue
36+
#4, Cost(A->X) + Cost(X->B) < Cost(A->B) : 업데이트 & push
37+
for i in graph[now]:
38+
cost = dist + i[1]
39+
if cost < distance[i[0]] :
40+
distance[i[0]] = cost
41+
heapq.heappush(q,(cost,i[0]))
42+
43+
islenK = False
44+
for i in range(1, city_count+1):
45+
if distance[i] == target_km :
46+
islenK = True
47+
print(i)
48+
if not islenK :
49+
print(-1)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
"""
2+
시작 1 ~ N번 node , road : m 개 (cost=1)
3+
최단거리= k인
4+
-> 다익스트라? ....BFS 감사합니다 ㅎ
5+
<BFS>
6+
0. 인접 리스트 graph 정의 , 시작 노드 queue 넣기 & 방문 등록
7+
1.queue 가 빌때 까지
8+
queue에서 꺼낸 n 과 인접한 노드 중 방문 안한 노드
9+
-> queue 넣고 방문 등록
10+
없으면 :
11+
-> queue에서 빼기
12+
13+
=> cost = level : start ~ 거리
14+
"""
15+
import sys
16+
from collections import deque
17+
18+
n, m, k, start = map(int, sys.stdin.readline().split())
19+
#0.graph 정의
20+
INF = 300001
21+
graph = [[] for _ in range(n+1)]
22+
cost= [INF]*(n+1) # 최단 거리 graph
23+
visited=[False]*(n+1)
24+
for _ in range(m):
25+
a,b = map(int, sys.stdin.readline().split())
26+
graph[a].append(b)
27+
28+
# print(graph)
29+
#2 BFS
30+
queue = deque([start])
31+
visited[start] = True
32+
cost[start] = 0
33+
answer =list()
34+
35+
while queue :
36+
now = queue.popleft()
37+
38+
for n in graph[now] :
39+
40+
if not visited[n] :
41+
queue.append(n)
42+
visited[n] = True
43+
cost[n] = cost[now] + 1
44+
if cost[n] == k :
45+
answer.append(n)
46+
# 출력
47+
if len(answer)== 0 :
48+
print(-1)
49+
else :
50+
answer.sort()
51+
for a in answer:
52+
print(a)
53+

0 commit comments

Comments
 (0)