Skip to content

Commit 3d830cb

Browse files
committed
2 parents b5bbebf + fc9a360 commit 3d830cb

21 files changed

+987
-0
lines changed

‎cmkim/BaekJoon/백준_17179.py

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
n, m, l = map(int, input().split())
2+
3+
cut = []
4+
arr = []
5+
for i in range(m): # 자르는 위치
6+
cut.append(int(input()))
7+
#print(cut)
8+
9+
for i in range(n): # 자르는 횟수
10+
arr.append(int(input()))
11+
12+
def calculate(mid, count): # 가장 작은 조각의 길이 > mid 일때 횟수를 세서 count 값이 만들어지면 성공
13+
prev = 0
14+
for i in range(m):
15+
if cut[i] - prev >= mid:
16+
count -= 1
17+
prev = cut[i]
18+
if count == 0:
19+
break
20+
21+
22+
if count == 0 and l - prev >= mid:
23+
return True
24+
else:
25+
return False
26+
27+
for i in range(n):
28+
piece = arr[i]
29+
left = 0
30+
right = l
31+
32+
while left + 1 < right:
33+
mid = (left + right) // 2
34+
if calculate(mid, piece):
35+
left = mid
36+
else:
37+
right = mid
38+
39+
print(left)
40+
41+
42+
43+
44+
45+

‎cmkim/BaekJoon/백준_4386.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import sys, math, heapq
2+
n = int(input())
3+
4+
arr = []
5+
connected = []
6+
sum = 0
7+
cost = 1e9
8+
9+
def dist(x1, y1, x2, y2):
10+
return math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
11+
12+
for i in range(n):
13+
x, y = map(float, input().split())
14+
arr.append((x, y))
15+
16+
q = []
17+
connected.append(0)
18+
for i in range(1, n):
19+
heapq.heappush(q, (dist(arr[0][0], arr[0][1], arr[i][0], arr[i][1]), i))
20+
21+
# print(connected)
22+
# print(q)
23+
24+
while n != len(connected):
25+
value, node = heapq.heappop(q)
26+
while node in connected:
27+
value, node = heapq.heappop(q)
28+
29+
sum += value
30+
connected.append(node)
31+
32+
for i in range(n):
33+
if i not in connected:
34+
heapq.heappush(q, (dist(arr[node][0], arr[node][1], arr[i][0], arr[i][1]), i))
35+
36+
print("%.2f"%(sum))
37+
38+
39+
40+
41+
42+
43+
44+
45+
46+
47+
48+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from collections import deque
2+
import heapq
3+
4+
n, k = map(int, input().split())
5+
arr = [[]]
6+
7+
temp = []
8+
q = deque()
9+
heap = []
10+
def dfs(count):
11+
while q:
12+
virus, x, y = q.popleft()
13+
for i in range(4):
14+
nx, ny = x + dx[i], y + dy[i]
15+
if 0 < nx <= n and 0 < ny <= n:
16+
if arr[nx][ny] == 0:
17+
arr[nx][ny] = virus
18+
q.append((virus, nx, ny))
19+
count -= 1
20+
21+
if count == 0:
22+
return
23+
24+
25+
dx = [-1, 1, 0, 0] # 상하좌우
26+
dy = [0, 0, -1, 1]
27+
28+
for i in range(1, n+1):
29+
arr.append(list(map(int, input().split())))
30+
arr[i].insert(0, 0)
31+
for j in range(n+1):
32+
if arr[i][j]:
33+
temp.append((arr[i][j], i, j))# 바이러스 종류, 행, 열
34+
#heapq.heappush(heap, (arr[i][j], (i, j)))
35+
#q.append((arr[i][j], i, j))# 바이러스 종류, 행, 열
36+
37+
38+
count = 1
39+
while True: # 너무 무식하게 넣었는데 더 깔끔한 방법은 없을까?
40+
for i in range(len(temp)):
41+
if temp[i][0] == count:
42+
q.append((temp[i][0], temp[i][1], temp[i][2]))
43+
count += 1
44+
if count > k:
45+
break
46+
47+
48+
49+
s, x, y = map(int, input().split())
50+
51+
for i in range(s):
52+
dfs(len(q))
53+
54+
print(arr[x][y])
55+
56+
57+
58+
59+

‎cmkim/이것이 취업을 위한 코딩 테스트다/특정 거리의 도시 찾기_339p.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from _collections import deque
2+
3+
n, m, k, x = map(int, input().split())
4+
5+
arr = [[] for _ in range(n+1)]
6+
dist = [1000000000] * (n+1)
7+
8+
for i in range(m):
9+
a, b = map(int, input().split())
10+
arr[a].append(b)
11+
#arr[b].append(a)
12+
13+
q = deque()
14+
q.append((x, 1))
15+
16+
while q:
17+
start, cost = q.popleft()
18+
19+
for end in arr[start]:
20+
dist[end] = min(dist[end], cost)
21+
q.append((end, cost+1))
22+
23+
count = 0
24+
for i in range(1, n+1):
25+
if dist[i] == k:
26+
print(i)
27+
count += 1
28+
29+
if not count:
30+
print(-1)
31+
32+
33+
34+
'''
35+
4 4 2 1
36+
1 2
37+
1 3
38+
2 3
39+
2 4
40+
'''

‎syheo/codingTest1/12-11-뱀.py

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#CH12 구현 기출
2+
#예제 12-11
3+
#뱀
4+
#백준 3190
5+
#골드 5
6+
7+
# 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.
8+
# 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.
9+
# 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다.
10+
11+
from collections import deque
12+
13+
#N:board size, K:apple count
14+
N = int(input())
15+
K = int(input())
16+
17+
#0: 빈칸, 1:사과, 2:뱀 몸통
18+
maps = [[0]*(N+1) for _ in range(N+1)]
19+
#사과 입력
20+
for i in range(K):
21+
a,b = map(int,input().split())
22+
maps[a][b]=1
23+
24+
#방향전환 입력
25+
opCnt = int(input())
26+
ops = deque([])
27+
for i in range(opCnt):
28+
a,b = map(str,input().split())
29+
ops.append((int(a),b))
30+
31+
time = 0
32+
moves = [(0,1),(1,0),(0,-1),(-1,0)] #우하좌상
33+
direction = 0
34+
row , col = 1, 1
35+
snake = deque([(row,col)])
36+
maps[row][col]=2
37+
38+
while True:
39+
#시간 1초 증가
40+
time += 1
41+
#이동
42+
row = row+moves[direction][0]
43+
col = col+moves[direction][1]
44+
if (row<=0 or row>N) or (col<=0 or col>N) or maps[row][col]==2:
45+
gameover = True
46+
break
47+
else:
48+
snake.append((row,col))
49+
if maps[row][col]==0:
50+
a,b = snake.popleft()
51+
maps[a][b]=0
52+
maps[row][col]=2
53+
#명령 시간이 되었다면
54+
if ops and ops[0][0]==time:
55+
X,C = ops.popleft()
56+
if C=='L':
57+
direction=direction-1 if direction>0 else 3
58+
elif C=='D':
59+
direction=direction+1 if direction<3 else 0
60+
61+
62+
print(time)
63+
+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#CH12 구현 기출
2+
#예제 12-13
3+
#치킨배달
4+
#백준 15686
5+
#골드 5
6+
7+
from collections import deque
8+
9+
def distance(a,b,c,d):
10+
return abs(a-c)+abs(b-d)
11+
12+
def bfs(a,chickenCnt,M):
13+
rstList = []
14+
q = deque([(a,1,[a])])
15+
while q:
16+
cur,cnt,chickenList = q.popleft()
17+
if cnt == M:
18+
rst = 0
19+
for house in houses:
20+
minDis = 101
21+
for item in chickenList:
22+
minDis = min(distance(house[0],house[1],chickens[item][0],chickens[item][1]),minDis)
23+
rst+=minDis
24+
rstList.append(rst)
25+
26+
for i in range(1,chickenCnt):
27+
pos = cur +i
28+
if pos<chickenCnt:
29+
q.append((pos,cnt+1,chickenList+[pos]))
30+
else:
31+
break
32+
return min(rstList)
33+
34+
N,M = map(int,input().split())
35+
36+
maps = []
37+
38+
for i in range(N):
39+
maps.append(list(map(int,input().split())))
40+
41+
chickens = []
42+
houses = []
43+
44+
for i in range(N):
45+
for j in range(N):
46+
if maps[i][j]==2:
47+
chickens.append((i,j))
48+
if maps[i][j]==1:
49+
houses.append((i,j))
50+
51+
52+
53+
answer = int(1e9)
54+
55+
for i in range(0,len(chickens)-M+1):
56+
answer=min(bfs(i,len(chickens),M),answer)
57+
58+
print(answer)
59+
60+
61+
62+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#CH13 BFSDFS기출
2+
#예제 13-15
3+
#특정거리의 도시찾기
4+
#백준 18352
5+
#실버 2
6+
7+
from collections import deque
8+
import sys
9+
input = sys.stdin.readline
10+
11+
N,M,K,X = map(int,input().split())
12+
13+
edges = [[] for _ in range(N+1)]
14+
visited = [False for _ in range(N+1)]
15+
#간선 정보 입력 받기
16+
for i in range(M):
17+
a,b = map(int,input().split())
18+
edges[a].append(b)
19+
20+
def bfs():
21+
answer = []
22+
q = deque([])
23+
q.append((X,0)) #현재노드, 이동 거리
24+
visited[X]=True
25+
while q:
26+
node, cnt = q.popleft()
27+
if cnt==K:
28+
answer.append(node)
29+
for next in edges[node]:
30+
if not visited[next]:
31+
q.append((next,cnt+1))
32+
visited[next]=True
33+
return answer
34+
35+
result = bfs()
36+
result.sort()
37+
if len(result)==0:
38+
print(-1)
39+
else:
40+
for res in result:
41+
print(res)

0 commit comments

Comments
 (0)