[BOJ] 2215. 원형 네트워크

starbow·2025년 8월 17일

PS/CP

목록 보기
22/25

문제 링크

NN개의 컴퓨터들이 원형으로 연결되어 있는데 이들 중 일부를 광섬유로 변결할 예정이고 이러한 요청이 PP개가 있습니다. 이때, 최소한의 연결만으로 모든 요청을 만족하게 하려고 합니다.

요청 pqp \, q가 들어왔다고 해봅시다. 일반성을 잃지 않고 pqp \leq q라고 가정해보죠. 그럼 아래와 같이 두가지 방법으로 연결할 수 있습니다.

pp+1q1qpp11Nq+1qp \leftrightarrow p + 1 \leftrightarrow \cdots \leftrightarrow q - 1 \leftrightarrow q \newline p \leftrightarrow p - 1 \leftrightarrow \cdots \leftrightarrow 1 \leftrightarrow N \leftrightarrow \cdots \leftrightarrow q + 1 \leftrightarrow q

위 방법은 00, 아래 방법은 11로 표기해보도록 하겠습니다.

그럼 각 회선이 광섬유로 교체되지 않는 상태를 길이가 PP인 문자열로 표현할 수 있습니다.
문제의 예제 1의 경우 다음과 같이 적을 수 있습니다.

S1,2=10S2,3=10S3,4=00S4,5=01S5,1=00S_{1, 2} = 10 \newline S_{2, 3} = 10 \newline S_{3, 4} = 00 \newline S_{4, 5} = 01 \newline S_{5, 1} = 00

실제로 각 상태값은 유일합니다. 다시말해 가장 많이 나오는 상태값의 갯수를 구해서 NN에 빼서 나오는 값이 답이 됩니다. 방금 논리대로 예제 1의 답을 구하면 3이되고 실제 답이랑 일치하는것을 확인할 수 있습니다.

C++에서는 unordered_map, C#에서는 Dictionary를 사용하면 시간복잡도 O(NP)O(NP)에 해결할 수 있습니다.

profile
🎈 Journey of problem solving

0개의 댓글