Skip to content

Commit 41ea5ff

Browse files
committed
📝 post BOJ solution
1 parent e20cc69 commit 41ea5ff

File tree

1 file changed

+167
-0
lines changed

1 file changed

+167
-0
lines changed
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
---
2+
layout: single
3+
title: "[백준 5205] School Colors (C#, C++) - soo:bak"
4+
date: "2026-01-23 16:02:00 +0900"
5+
description: "백준 5205번 C#, C++ 풀이 - 색상 목록에서 유클리드 거리 기준 가장 대비가 큰 색상 쌍을 모두 찾는 문제"
6+
tags:
7+
- 백준
8+
- BOJ
9+
- 5205
10+
- C#
11+
- C++
12+
- 알고리즘
13+
- 구현
14+
- 브루트포스
15+
- 기하학
16+
keywords: "백준 5205, 백준 5205번, BOJ 5205, School Colors, C# 풀이, C++ 풀이, 알고리즘"
17+
---
18+
19+
## 문제 링크
20+
[5205번 - School Colors](https://www.acmicpc.net/problem/5205)
21+
22+
## 설명
23+
대비가 최대가 되는 모든 색상 쌍의 인덱스를 구하는 문제입니다.
24+
25+
모든 쌍의 거리를 비교해 최댓값과 같은 쌍을 모으면 답이 됩니다.
26+
27+
<br>
28+
29+
## 접근법
30+
먼저 모든 색상 쌍을 만들어 대비를 계산합니다.
31+
32+
최댓값이 되는 쌍이 여러 개일 수 있으므로, 현재 최댓값보다 크면 목록을 비우고 다시 담는 방식이 자연스럽습니다.
33+
34+
다음으로 거리의 제곱값을 비교하고, 문제의 인덱스 규칙에 맞게 1부터 출력합니다.
35+
36+
<br>
37+
38+
- - -
39+
40+
## Code
41+
42+
### C#
43+
```csharp
44+
using System;
45+
using System.Collections.Generic;
46+
using System.IO;
47+
using System.Text;
48+
49+
class fastscanner {
50+
private readonly StreamReader _reader;
51+
private string[] _tokens = Array.Empty<string>();
52+
private int _index = 0;
53+
54+
public fastscanner(StreamReader reader) {
55+
_reader = reader;
56+
}
57+
58+
public int nextint() {
59+
while (_index >= _tokens.Length) {
60+
var line = _reader.ReadLine();
61+
if (line == null) {
62+
return 0;
63+
}
64+
_tokens = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
65+
_index = 0;
66+
}
67+
var value = int.Parse(_tokens[_index]);
68+
_index++;
69+
return value;
70+
}
71+
}
72+
73+
class Program {
74+
static void Main() {
75+
using var reader = new StreamReader(Console.OpenStandardInput());
76+
using var writer = new StreamWriter(Console.OpenStandardOutput());
77+
var fs = new fastscanner(reader);
78+
var k = fs.nextint();
79+
var sb = new StringBuilder();
80+
for (var ds = 1; ds <= k; ds++) {
81+
var n = fs.nextint();
82+
var colors = new (int r, int g, int b)[n];
83+
for (var i = 0; i < n; i++) {
84+
var r = fs.nextint();
85+
var g = fs.nextint();
86+
var b = fs.nextint();
87+
colors[i] = (r, g, b);
88+
}
89+
90+
var best = -1L;
91+
var pairs = new List<(int, int)>();
92+
for (var i = 0; i < n; i++) {
93+
for (var j = i + 1; j < n; j++) {
94+
var dr = colors[i].r - colors[j].r;
95+
var dg = colors[i].g - colors[j].g;
96+
var db = colors[i].b - colors[j].b;
97+
var dist2 = 1L * dr * dr + 1L * dg * dg + 1L * db * db;
98+
if (dist2 > best) {
99+
best = dist2;
100+
pairs.Clear();
101+
pairs.Add((i + 1, j + 1));
102+
} else if (dist2 == best) {
103+
pairs.Add((i + 1, j + 1));
104+
}
105+
}
106+
}
107+
108+
sb.Append("Data Set ").Append(ds).Append(":\n");
109+
foreach (var (a, b) in pairs) {
110+
sb.Append(a).Append(' ').Append(b).Append('\n');
111+
}
112+
}
113+
writer.Write(sb.ToString());
114+
}
115+
}
116+
```
117+
118+
### C++
119+
```cpp
120+
#include <bits/stdc++.h>
121+
using namespace std;
122+
123+
typedef long long ll;
124+
typedef pair<int,int> pii;
125+
typedef vector<pii> vp;
126+
127+
int main() {
128+
ios::sync_with_stdio(false);
129+
cin.tie(nullptr);
130+
131+
int k;
132+
cin >> k;
133+
for (int ds = 1; ds <= k; ds++) {
134+
int n;
135+
cin >> n;
136+
vector<array<int,3>> c(n);
137+
for (int i = 0; i < n; i++) {
138+
cin >> c[i][0] >> c[i][1] >> c[i][2];
139+
}
140+
141+
ll best = -1;
142+
vp ans;
143+
for (int i = 0; i < n; i++) {
144+
for (int j = i + 1; j < n; j++) {
145+
ll dr = c[i][0] - c[j][0];
146+
ll dg = c[i][1] - c[j][1];
147+
ll db = c[i][2] - c[j][2];
148+
ll dist2 = dr * dr + dg * dg + db * db;
149+
if (dist2 > best) {
150+
best = dist2;
151+
ans.clear();
152+
ans.emplace_back(i + 1, j + 1);
153+
} else if (dist2 == best) {
154+
ans.emplace_back(i + 1, j + 1);
155+
}
156+
}
157+
}
158+
159+
cout << "Data Set " << ds << ":\n";
160+
for (auto &p : ans) {
161+
cout << p.first << ' ' << p.second << "\n";
162+
}
163+
}
164+
165+
return 0;
166+
}
167+
```

0 commit comments

Comments
 (0)