https://school.programmers.co.kr/learn/courses/30/lessons/86971
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내일 AI tech 6기 코테가 있어서 네이버 측에서 올려준 프로그래밍 영역 자가진단 문제를 풀어봤다.
BFS로 문제를 풀었고 1시간 정도 걸렸다.
아직 프로그래머스가 익숙하지 않아서 디버깅을 못해서 애먹었다.
실제로 코테를 볼 때는 외부 IDE를 이용 금지니까 연습 해봐야지..
from collections import deque
def bfs(X, Y, n, graph):
queue = deque()
queue.append(X)
visited1 = [False]*(n+1)
num1, num2 = 1, 1
difference = 10000000000
while queue:
x = queue.popleft()
if visited1[x] == False:
visited1[x] = True
for i in graph[x]:
if visited1[i] == False:
if i == Y:
continue
else:
num1 += 1
visited1[i] = True
queue.append(i)
queue = deque()
visited2 = [False]*(n+1)
queue.append(Y)
while queue:
y = queue.popleft()
if visited2[y] == False:
visited2[y] = True
for j in graph[y]:
if visited2[j] == False:
if j == X:
continue
else:
num2 += 1
visited2[j] = True
queue.append(j)
if num1 >= num2 and difference > (num1 - num2):
difference = num1 - num2
elif num1 < num2 and difference > (num2 - num1):
difference = num2 - num1
return difference
def solution(n, wires): # 송전탑 개수, 전선 정보
answer = 100000000000000
temp_answer = -1
# make the graph
graph = [[] for _ in range(n+1)]
for i in range(len(wires)):
a, b = wires[i][0], wires[i][1]
graph[a].append(b)
graph[b].append(a)
for i, j in wires:
temp_answer = bfs(i, j, n, graph)
if answer > temp_answer:
answer = temp_answer
return answer
'Algorithm > 알고리즘 문제' 카테고리의 다른 글
[백준/BOJ] 2644번 촌수계산 (0) | 2023.09.18 |
---|---|
[백준/BOJ] 2606번 바이러스 (0) | 2023.09.18 |
[백준/BOJ] 백트래킹 N과 M시리즈(1)~(8) (1) | 2023.09.11 |
[백준/BOJ][Python] 5635번 생일 (0) | 2023.03.18 |
[백준/BOJ][Python] 2667번 단지번호붙이기 (0) | 2023.03.10 |