Skip to content

Commit

Permalink
Merge pull request #128 from hjk0761/main
Browse files Browse the repository at this point in the history
week17_hjk0761
  • Loading branch information
hjk0761 authored Sep 9, 2024
2 parents caf90bd + 270ee8d commit e62f9c8
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 3 deletions.
21 changes: 21 additions & 0 deletions week17/A_32160/hjk0761/32160.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import heapq

n = int(input())

if (n-1)%4 in [0, 3]:
print(n)
else:
print(n-1)


q = [-1*(i+1) for i in range(n-1)]
heapq.heapify(q)

while len(q) > 1:
a = heapq.heappop(q) * -1
b = heapq.heappop(q) * -1
print(a, b)
heapq.heappush(q, b - a)

if len(q) == 1:
print(n, heapq.heappop(q) * -1)
17 changes: 16 additions & 1 deletion week17/A_32160/hjk0761/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
# Info
[Link](https://boj.kr/32160)
[숫자 놀이](https://boj.kr/32160)

## 💡 풀이 방법 요약

수학입니다.

두 수의 차를 다시 가져가기 때문에 나올 수 있는 최대값은 `N` 혹은 `N-1` 만 가능합니다.

짝수 개의 1을 만들 수 있으면 최대값은 `N`이 되고, 아니라면 `N-1`인데,

과정과 상관없이 n 으로 나누어 나머지가 0 혹은 1 이면 4개의 1을 만들 수 있고 아니라면 항상 한 개의 1이 남게 됩니다.

과정은 n을 제외하고 내림차순으로 두 개씩 꺼내서 차를 구해서 다시 넣어주면 됩니다.

계속 큰 값 두 개를 꺼내기 위해 priority queue 를 사용했습니다.

## 👀 실패 이유

방법 출력에서 정렬을 잘못해서 틀렸습니다.

## 🙂 마무리
40 changes: 40 additions & 0 deletions week17/B_31997/hjk0761/31997.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import sys

n, m, t = map(int, input().split())

getIn = [[] for _ in range(t+1)]
getOut = [[] for _ in range(t+1)]

for i in range(n):
a, b = map(int, sys.stdin.readline().strip().split())
getIn[a].append(i)
getOut[b].append(i)

relations = [set() for _ in range(n)]

for i in range(m):
c, d = map(int, sys.stdin.readline().strip().split())
relations[c-1].add(d-1)
relations[d-1].add(c-1)

attendency = [False for _ in range(n)]

result = []

temp = 0

for i in range(t):
for p in getOut[i]:
attendency[p] = False
for f in relations[p]:
if attendency[f]:
temp -= 1
for p in getIn[i]:
attendency[p] = True
for f in relations[p]:
if attendency[f]:
temp += 1
result.append(temp)

for re in result:
print(re)
10 changes: 9 additions & 1 deletion week17/B_31997/hjk0761/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
# Info
[Link](https://boj.kr/31997)
[즐거운 회의](https://boj.kr/31997)

## 💡 풀이 방법 요약

어느 친한 친구쌍이 대화를 나누었는지는 중요하지 않습니다.

시간 별로 회의가 끝나 떠나게 될 때 이전까지 대화 가능한 쌍에 포함되었다면 대화 가능한 쌍의 수를 1 빼주고,
회의를 시작하는 인원들로부터 친한 친구가 존재하면 대화 가능한 쌍의 수를 1 늘리면 됩니다.

## 👀 실패 이유

러프하게 일일이 계산하니 당연히 시간초과가 났습니다.

## 🙂 마무리
34 changes: 34 additions & 0 deletions week17/C_31932/hjk0761/31932.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import sys
import heapq

n, m = map(int, input().split())

graph = [[] for _ in range(n)]

for i in range(m):
u, v, d, t = map(int, sys.stdin.readline().strip().split())
graph[u-1].append((v-1, d, t))
graph[v-1].append((u-1, d, t))

def dijkstra(graph, start):
visited = [False for _ in range(n)]
result = [-1 for _ in range(n)]
q = []
heapq.heappush(q, (-10000000000, 0, start))
while q:
latest_time, min_time, node = heapq.heappop(q)
visited[node] = True
if result[node] == -1:
result[node] = -1 * latest_time
else:
result[node] = max(result[node], -1 * latest_time)
for next, d, t in graph[node]:
if visited[next] or min_time > t - d:
continue
next_latest_time = -1 * min(-1 * latest_time - d, t - d)
next_min_time = min_time + d
heapq.heappush(q, (next_latest_time, next_min_time, next))

return result[n-1-start]

print(dijkstra(graph, n-1))
11 changes: 10 additions & 1 deletion week17/C_31932/hjk0761/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
# Info
[Link](https://boj.kr/31932)
[나는 북극곰입니다](https://boj.kr/31932)

## 💡 풀이 방법 요약

일단 틀린 풀이에 대한 설명은,

마지막 빙하부터 거슬러 올라가면서, 빙하 별로 접근 가능한 다리에 대해, 해당 다리를 건널 수 있는 가장 늦은 시간을 트래킹했습니다.

다익스트라처럼 모든 노드에 대해 수행해주면 N 번 빙하로부터 1 번 빙하로 갈 수 있는 경로들에 대해서 가장 여유롭게 출발할 수 있는 시간을 알 수 있을 것이라고 생각했습니다.

## 👀 실패 이유

풀지 못했습니다,,, 18퍼에서 왜 틀리는지 찾질 못했어요.

## 🙂 마무리

0 comments on commit e62f9c8

Please sign in to comment.