Skip to content

Conversation

@Mingguriguri
Copy link
Collaborator

🌱WIL

이번 한 주의 소감을 작성해주세요!

  • 오랜만에 문제 풀이해서 시간이 오래 걸리고 아이디어가 잘 떠오르지 않았다. 다시 꾸준히 푸는 연습이 필요할 것 같다.

🚀주간 목표 문제 수: 2개

푼 문제


백준 #1916. 최소비용 구하기: 그래프 / 골드5

정리한 링크: (바로가기)

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?

🚩제출한 코드

import sys
import heapq
input = sys.stdin.readline

# 입력
N = int(input())    # 도시의 개수
M = int(input())    # 버스의 개수
graph = [[] for _ in range(N+1)]
for _ in range(M):
    start, end, weight = map(int, input().split())
    graph[start].append([end, weight])

# 우리가 구하고자 하는 구간의 출발지와 도착지 번호
goal_s, goal_e = map(int, input().split())

# 최단거리 테이블 초기화
distances = [float('inf')] * (N+1)
distances[goal_s] = 0
heap = []
heapq.heappush(heap, (goal_s, 0)) # 힙(heap)에 (시작노드, 가중치) 추가

while heap:
    current, dist = heapq.heappop(heap) # 최소힙

    if distances[current] >= dist:
        for node, weight in graph[current]:
            if dist + weight < distances[node]: # 지금 발견한 게 더 작으면
                distances[node] = dist + weight
                heapq.heappush(heap, (node, dist + weight))

print(distances[goal_e])

💡TIL

배운 점이 있다면 입력해주세요


백준 #17141. 연구소2: 그래프 / 골드4

정리한 링크: (바로가기)

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?

🚩제출한 코드

import sys
from collections import deque
from itertools import combinations

# 상, 하, 좌, 우
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

input = sys.stdin.readline
answer = float("inf")  # 최솟값을 찾기 위해 초깃값을 inf로 설정


def bfs(v):
    queue = deque(v)
    visited = [[-1 for _ in range(N)] for _ in range(N)]
    min_value = 0  # 최소 횟수를 찾기 위한 변수
    for x, y in queue:
        visited[x][y] = 0
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            ax = x + dx[i]
            ay = y + dy[i]
            if 0 <= ax < N and 0 <= ay < N:
                if visited[ax][ay] == -1 and board[ax][ay] != 1:
                    queue.append([ax, ay])
                    visited[ax][ay] = visited[x][y] + 1
                    min_value = max(min_value, visited[x][y] + 1)

    for i in range(N):
        for j in range(N):
            if visited[i][j] == -1 and board[i][j] != 1:
                return float("inf")
    return min_value


N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
virus = []

# 바이러스의 좌표 찾기
for i in range(N):
    for j in range(N):
        if board[i][j] == 2:
            virus.append([i, j])

# 바이러스 좌표들 중 M개를 뽑아 BFS 수행
for v in combinations(virus, M):
    answer = min(bfs(v), answer)

# 정답 반환
if answer == float("inf"):
    print(-1)
else:
    print(answer)

💡TIL

배운 점이 있다면 입력해주세요

@Mingguriguri Mingguriguri self-assigned this Oct 19, 2025
@Mingguriguri Mingguriguri merged commit 45f461b into main Oct 21, 2025
@github-actions
Copy link

🔥2025-10 챌린지 진행 상황

👉 그래프

  • Mingguriguri: 2개 ❌

👉 구현

  • Mingguriguri: 0개 ❌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants