-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #128 from hjk0761/main
week17_hjk0761
- Loading branch information
Showing
6 changed files
with
130 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 를 사용했습니다. | ||
|
||
## 👀 실패 이유 | ||
|
||
방법 출력에서 정렬을 잘못해서 틀렸습니다. | ||
|
||
## 🙂 마무리 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 늘리면 됩니다. | ||
|
||
## 👀 실패 이유 | ||
|
||
러프하게 일일이 계산하니 당연히 시간초과가 났습니다. | ||
|
||
## 🙂 마무리 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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퍼에서 왜 틀리는지 찾질 못했어요. | ||
|
||
## 🙂 마무리 |