8000 Update 2461.cpp · jeire/basic-algo-lecture@9ce73f5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9ce73f5

Browse files
committed
Update 2461.cpp
1 parent cc459fe commit 9ce73f5

File tree

1 file changed

+39
-34
lines changed

1 file changed

+39
-34
lines changed

0x14/solutions/2461.cpp

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,44 @@
1-
// Authored by : jimi567
1+
// Authored by : keyboardmunji
22
// Co-authored by : -
3-
// http://boj.kr/7d30341579424e59a3868fc91e1980d6
4-
#include <bits/stdc++.h>
5-
using namespace std;
3+
// http://boj.kr/e0c5f4a5d5fc4c8bae9107590e538eae
4+
#include<bits/stdc++.h>
65
#define X first
76
#define Y second
8-
#define ll long long
9-
int n, m;
10-
int arr[1005][1005];
11-
int ans = 0x7f7f7f7f;
12-
vector<int> idx; //각 팀들의 현재 인덱스를 저장하는 벡터.
7+
8+
using namespace std;
9+
int n, m, cnt, en, ans = 0x7f7f7f7f;
10+
int chk[1005]; // 각 팀이 구간속에 모두 있는지 확인하는 벡터
11+
vector<pair<int, int>> a; // 능력치와 각팀의 인덱스를 저장하는 벡터
12+
1313
int main(void) {
14-
ios::sync_with_stdio(0);
15-
cin.tie(0);
16-
cin >> n >> m;
17-
for (int i = 0; i < n; i++) {
18-
idx.push_back(0);
19-
for (int j = 0; j < m; j++) cin >> arr[i][j];
20-
}
21-
for (int i = 0; i < n; i++) sort(arr[i], arr[i] + m);
22-
while (1) {
23-
int mntm;
24-
int mx = -1;
25-
int mn = 0x7f7f7f7f;
26-
for (int i = 0; i < n; i++) {
27-
if (mn > arr[i][idx[i]]) { //최솟값 갱신, 최솟값을 가지는 팀 갱신
28-
mn = arr[i][idx[i]];
29-
mntm = i;
30-
}
31-
if (mx < arr[i][idx[i]]) mx = arr[i][idx[i]]; //최댓값 갱신
14+
ios::sync_with_stdio(false);
15+
cin.tie(NULL);
16+
17+
cin >> n >> m;
18+
for (int i = 0;i < n;i++) {
19+
for (int j = 0;j < m;j++) {
20+
int num;
21+
cin >> num;
22+
a.push_back({ num, i });
23+
}
24+
}
25+
sort(a.begin(), a.end());
26+
27+
for (int st = 0;st < n * m;st++) {
28+
// 구간 속에 각 팀이 모두 포함되게 en을 증가
29+
while (cnt < n && en < n * m) {
30+
if (chk[a[en].Y] == 0)
31+
cnt++;
32+
chk[a[en].Y]++;
33+
en++;
34+
}
35+
if (cnt != n)
36+
break;
37+
ans = min(ans, a[en - 1].X - a[st].X);
38+
chk[a[st].Y]--;
39+
if (chk[a[st].Y] == 0)
40+
cnt--;
3241
}
33-
ans = min(ans, mx - mn);
34-
idx[mntm] += 1;
35-
if (idx[mntm] == m)
36-
break; //만약 최솟값을 가지는 팀이 마지막 인덱스에 해당하면 종료.
37-
}
38-
cout << ans;
39-
}
42+
cout << ans;
43+
return 0;
44+
}

0 commit comments

Comments
 (0)
0