-
Notifications
You must be signed in to change notification settings - Fork 1
33-kangrae-jo #133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
33-kangrae-jo #133
Conversation
9kyo-hwang
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ C++์ set(Java์ TreeSet) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๊ทผํ๊ฒ ํ๋ฆฌ๊ฒ ๋ค~ ํ๋๋ฐ Set์ ๋ด๋ถ ๊ตฌํ์ด ๋งค์ฐ ๋๋ ค์ ํต๊ณผ๊ฐ ์๋๋ค์ ใ ... ๋ ๋จน ์คํจ!
Set ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M, K; cin >> N >> M >> K;
vector<int> cardList(M);
for(int& card : cardList) {
cin >> card;
}
set<int> cards(cardList.begin(), cardList.end());
while(K--) {
int card; cin >> card;
auto it = cards.upper_bound(card);
cout << *it << endl;
cards.erase(it);
}
return 0;
}๊ฒฐ๊ตญ ๋ฐฐ์ด์ ์ ๋ ฌํ๊ณ ์ด์งํ์์ ๋๋ ค์ผ ํ๋๋ฐ, ์ฒ ์๊ฐ ๋ธ ์นด๋๋ณด๋ค ํฐ ์นด๋ ์ค ๊ฐ์ฅ ์์ ๊ฒ(upper_bound)์ ์ฐพ์๋ด๋ ๊ฒ์ ์ข์๋ฐ ์ฌ์ฉ๋ ์นด๋๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ ์ง๊ฐ ๊ณ ๋ฏผ์ด์์ต๋๋ค.
๊ฐ์ด ์์กํ์ ์๊ณ ๋ฆฌ์ฆ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ดค๋๋ฐ, Disjoint Set์ด ์๊ธธ๋ "์ด๊ฒ ๋์ฒด ์ด๋ป๊ฒ ์ฐ๋ ๊ฑฐ์ง...?" ์ถ์ด์ ํ์ฐธ ๋๋ ๋๋ค์. ๊ทธ๋๋ ์ฝ๊ฐ ์๋ฎฌ๋ ์ด์ ์ ํด๋ณด๋๊น ๊ฐ์ ์ก์์ต๋๋ค.
์ฃผ์ด์ง ์นด๋๋ฅผ ์ ๋ ฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
2 3 4 5 7 8 9
์ฒซ ๋ฒ์งธ๋ก ์นด๋ 4๋ฅผ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ณด๋ค ํฐ ์นด๋์ธ [5 7 8 9] ์ค ๊ฐ์ฅ ์์ 5๋ฅผ ๋ด์ผ ํฉ๋๋ค. 5๋ฅผ ๋ด๊ณ , 5 ๋ฐ๋ก ๋ค์์ผ๋ก ํฐ ์นด๋์ ๋ฌถ์ต๋๋ค
2 3 4 7 8 9
5
๋ค์์ผ๋ก ์นด๋ 1์ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ 2๋ฅผ ๋ด์ผ ํฉ๋๋ค. 2๋ฅผ ๋ด๊ณ , 2 ๋ฐ๋ก ๋ค์์ผ๋ก ํฐ ์นด๋ 3๊ณผ ๋ฌถ์ต๋๋ค.
3 4 7 8 9
2 5
๋ค์ ์นด๋ 1์ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ 3์ ๋ด์ผ ํฉ๋๋ค. FInd๋ฅผ ํตํด ์ต์๋จ ๋ถ๋ชจ์ธ 3์ ๋ด๊ณ , 3 ๋ฐ๋ก ๋ค์์ผ๋ก ํฐ ์นด๋ 4์ ๋ฌถ์ต๋๋ค.
4 7 8 9
3 5
2
๋ค์์ ์นด๋ 3์ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ 4๋ฅผ ๋ด์ผ ํฉ๋๋ค. FInd๋ฅผ ํตํด 4๋ฅด ๋ด๊ณ , 4 ๋ฐ๋ก ๋ค์์ผ๋ก ํฐ ์นด๋ 7๊ณผ ๋ฌถ์ต๋๋ค.
7 8 9
5
4
3
2
๋ง์ง๋ง์ผ๋ก ์นด๋ 8์ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ 9๋ฅผ ์ ์ํฉ๋๋ค. 9๋ ์ฃผ์ด์ง ์นด๋์ ๋ง์ง๋ง ์นด๋์ด๋ฏ๋ก, ๋ณ๋๋ก Union์ ์งํํ์ง ์์ต๋๋ค.
์ด๋ฌํ ๋ก์ง์ ํตํด, ์ฌ์ฉ ๊ฐ๋ฅํ ์นด๋ ์ค upper_bound ์นด๋์ ๋ฐ๋ก ๋ค์ ์นด๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ฝ์๋ผ ์ ์๋๋ก ํฉ๋๋ค.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M, K; cin >> N >> M >> K;
vector<int> cards(M);
for(int& card : cards) {
cin >> card;
}
sort(cards.begin(), cards.end());
vector<int> parents(M + 1);
iota(parents.begin(), parents.end(), 0);
auto Find = [&](int x) {
while(x != parents[x]) {
parents[x] = parents[parents[x]];
x = parents[x];
}
return parents[x];
};
auto Union = [&](int u, int v) {
u = Find(u);
v = Find(v);
if(u == v) {
return false;
}
parents[u] = v;
return true;
};
while(K--) {
int card; cin >> card;
int index = Find(upper_bound(cards.begin(), cards.end(), card) - cards.begin());
cout << cards[index] << "\n";
if(index + 1 < M) {
Union(index, index + 1);
}
}
return 0;
}์ฌ์ค ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก Union-Find ํด์ผ ํ๋๋ฐ, ๊ฐ ๊ธฐ์ค์ผ๋ก ํด๋ฒ๋ฆฐ ๊ฑด ์ ๋น๋ฐ... ใ
g0rnn
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ ๋ง ์ด๋ ต๊ตฐ์.. ๊ตฌ๊ธ์ ๊ด๋ จ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฒ์ํด๋ณด๋ ์์ ์ ํ๋ ํฐ๋ ๋ฌธ์ ์๋๋ด ๋๋ค ํํ
์ฒ์์ ์ฌ์ค PriorityQueue๋ฅผ ์ฌ์ฉํด์ ๋ ๋จน ํ๋ ค ํ์ผ๋ 57ํผ์์ ์คํจํ๋๊ตฐ์. ์ฒ ์์ ์นด๋๋ณด๋ค ํฐ ์นด๋ ์ค ๊ฐ์ฅ ์์ ์นด๋๋ง์ ์ฐพ์ผ๋ ค๋ ์ค์ ๋๋ฌธ์ด์์ต๋๋ค.
Fail 57%
import java.util.*;
import java.io.*;
public class Main {
static int n, m, k;
static int[] answer;
static PriorityQueue<Integer> minsu = new PriorityQueue<>();
static PriorityQueue<int[]> chulsu = new PriorityQueue<>((a, b) -> {
if (a[0] == b[0]) return Integer.compare(a[1], b[1]);
return Integer.compare(a[0], b[0]);
});
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m; i++) {
minsu.add(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < k; i++) {
int card = Integer.parseInt(st.nextToken());
chulsu.add(new int[]{card, i});
}
br.close();
answer = new int[k];
while (!chulsu.isEmpty()) {
int blue = minsu.poll();
int red = chulsu.peek()[0];
int index = chulsu.poll()[1];
while (red >= blue) { // ๋ฏผ์๊ฐ ๋ผ ์นด๋๊ฐ ์ฒ ์๋ณด๋ค ๋ ์ปค์ง ๋๊น์ง ์นด๋๋ฅผ ์ฐพ์
blue = minsu.poll();
}
answer[index] = blue;
}
for (int i = 0; i < k; i++) {
System.out.println(answer[i]);
}
}
}์ด๊ฑด ๋ค์ ํ ์คํธ ์ผ์ด์ค์์ ์คํจํฉ๋๋ค. ๋ฏผ์๊ฐ ๋ผ ์นด๋๊ฐ ์ฒ ์๊ฐ ๋ธ ์นด๋๋ณด๋ค ์ ๋ถ ํฌ๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๊น๋๋ค.
100 4 3
30 40 50 60
29 1 24
out:
30
40
50
๊ทธ๋์ ํ์ด๋ฅผ ๋ดค์ต๋๋ค. ์ ๋์จ ํ์ธ๋๋ผ๋ ์ฝ๊ฐ ์์ํ ๊ฐ๋ ์ ์ฌ์ฉํ๋ ๋ฌธ์ ์์ต๋๋ค. ์์ ์ ๋๊ฐ ์น๊ตฌ ์ฐพ๋ ๋ฌธ์ ๋ฅผ ์ฌ๋ ธ์๋๋ฐ ๊ทธ ๋ ์ฌ์ฉํ์๋๊ฑฐ ๊ฐ์์. ๋๋ฌด ์๋ ์ด๋ผ ๊ธฐ์ต์ด ์ ์๋์ง๋ง..
๊ทผ๋ฐ ๋๋ฌด ์๋ฟ์ง ์์์ ์ข ๊ณ ๋ฏผํด๋ดค์ต๋๋ค.
์ ๋์จ ํ์ธ๋๋ ์๋ ๋ ์งํฉ์ด ์๋ก์์ธ์ง๋ฅผ ํ๋ณํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋์ ๋ ๋คํธ์ํฌ ๊ฐ ์ฐ๊ฒฐ์ง์ ์ด ์๋์ง ํ์ธํ ๋ ์ฌ์ฉ๋์ฃ .
ํ์ง๋ง ์ด ๋ฌธ์ ๋ ์ ๋์จ ํ์ธ๋๋ฅผ ํ ๋ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ ์ฝ๊ฐ ์์ฉํด์ผ ํ๋ค์. ์งํฉ์ ๊ตฌ์ฑํ ๋ ์๋ก ์ฐ๊ฒฐ๋์ด ์์์ ์ฆ๋ช ํ๋ DSU๋ ์์ ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ฐ ์ด๊ฑธ ๋ฐ๋ผ๋ค๊ฐ ๋ณด๋ฉด ๊ฐ ์งํฉ์ ๋ํ ๋ ธ๋๋ฅผ ํ์ธํ ์ ์์ด์. ์ด ๋ ๋ํ๋ ธ๋๋ฅผ ์์ง ์ฌ์ฉ๋์ง ์์ ๋๋ณด๋ค ํฐ ๋ ์์ผ๋ก ์ค์ ํฉ๋๋ค.
find๋ผ๋ ๋ฉ์๋๋ก๋ ์ด ๋ํ๋
ธ๋๋ฅผ ์ฐพ๋ ๊ฒ์ด๊ณ , use๋ ํด๋น ์ธ๋ฑ์ค๋ ์ฌ์ฉํ์ผ๋ ๋ํ๋
ธ๋๋ฅผ ์ค์ ํ ์ ์๊ฒ ํ๋ ๋ฉ์๋์ฃ . (๋จ, DSU๋ฅผ ์ด๊ธฐํํ ๋ ์๊ธฐ ์์ ์ ๋ํ๋
ธ๋๋ก ์ค์ )
์ฌ๋ฏธ๋ ๋ฌธ์ ๊ฐ์ฌํฉ๋๋
package beakjoon;
import java.util.*;
import java.io.*;
public class Sol16566 {
static int n, m, k;
static int[] cards;
static int[] parent;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
cards = new int[m];
for (int i = 0; i < m; i++) {
cards[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(cards);
// DSU: ์๋ก ๊ฒน์น์ง ์๋ ์งํฉ
parent = new int[m + 1];
for (int i = 0; i <= m ; i++) {
parent[i] = i;
}
st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
while(st.hasMoreTokens()) {
int x = Integer.parseInt(st.nextToken());
int idx = upperBound(cards, x);
int p = find(idx);
sb.append(cards[p]).append('\n');
use(p);
}
System.out.println(sb);
}
private static int upperBound(int[] cards, int x) {
int l = 0, r = cards.length;
while (l < r) {
int mid = (l + r) / 2;
if (cards[mid] <= x) l = mid + 1;
else r = mid;
}
return l;
}
private static int find(int x) {
if (parent[x] == x) return x;
return parent[x] = find(parent[x]);
}
private static void use(int idx) {
parent[idx] = find(idx + 1);
}
}There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํ์ด๋ฒ์ ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์์์ต๋๋ค.
๊ทผ๋ฐ upperBound, lowerBound ๊ตฌํ์ด ์์ง ๋ฏธ์ํด์
๊ตฌํ์ ์ข ์ฐธ๊ณ ๋ฅผ ํ์ต๋๋ค.
์ ๊ฐ ๋ ์ฌ๋ฆฐ ํ์ด๋ฒ์
upperBound์ผ๋ก ๋ฏผ์๋ ๋ฑ์์ target๋ณด๋ค ํฐ ์ ์ค ์ฒซ ๋ฒ์งธ ์นด๋๋ฅผ ๋
๋๋ค.
๊ทธ๋ฆฌ๊ณ M์ด ์ต๋ 4,000,000, K๋ ์ต๋ 10,000๋ผ ์ฌ์ฉํ ์นด๋๋ฅผ ๋ฐฐ์ด์์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ถ๋ด์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ง๋ง ์ฌํ์ฉ์ ๋ฐฉ์งํด์ผ ํ๋ ์ฌ์ฉํ๋ค๋ ํ์๋ฅผ visited[]๋ก ํด์ฃผ์์ต๋๋ค.
(๊ทธ๋ํ ํ์์์ ํ๋ visited๋ก ์ฌ์ฉํ๋ ๋ฐฐ์ด๋ช
์ ์ต๊ด๋๋ก ์ ์๋ค์.)
๊ธฐ์กด์ upperBound ์ฝ๋์์ ๊ฒฐ์ ๋ ์ธ๋ฑ์ค์ ์นด๋๊ฐ ์ด๋ฏธ ์ฌ์ฉ๋ ์นด๋๋ผ๋ฉด
๊ทธ ๋ค์ ์ฌ์ฉ๋์ง ์์ ์นด๋๋ค ์ค ๊ฐ์ฅ ์์ ์์ ์นด๋๋ฅผ ์ฌ์ฉํ๋๋ก ์์ ํด์ฃผ์์ต๋๋ค.
์ด๋ฐ ์ ํ์ ํ์ด๋ฅผ ์ ๋์จ ํ์ธ๋๋ผ๊ณ ํ๋๊ตฐ์.
๊ฐ๋๋์ PR ์ฐธ๊ณ ํด์ ๋ ๊ณต๋ถํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์๊ณ ํ์ จ์ต๋๋ค!
(๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ๊ณ ๋ณด๋ ๋ค๋ฅธ ๋ถ๋ค์ ๋ง์ด ๊ณ ๋ฏผํ ๊ฒ ๊ฐ๋ค์.
์ ๋ ๋จ์ํ๊ฒ ๋ ์ฌ๋ฆฐ ํ์ด๋ฅผ ๊ทธ๋๋ก ๊ตฌํํ๋๋ฐ ํ๋ ธ์ต๋๋ค.
ํน์ ๊ทธ๋ฅ ์ด์ด ์ข์๋ ๊ฒ์ผ๊น์...? ๋ถ์ํ๋ค์)
Details
import java.util.*;
import java.io.*;
public class Main {
static int N, M, K;
static int[] minsuDecks, cheolsuCards;
static boolean[] visited;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
minsuDecks = new int[M];
for (int i = 0; i < M; i++) {
minsuDecks[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(minsuDecks);
st = new StringTokenizer(br.readLine());
cheolsuCards = new int[K];
for (int i = 0; i < K; i++) {
cheolsuCards[i] = Integer.parseInt(st.nextToken());
}
visited = new boolean[M];
StringBuilder sb = new StringBuilder();
for (int card : cheolsuCards) {
sb.append(minsuDecks[upperBound(card)]).append("\n");
}
System.out.print(sb);
}
static int upperBound(int target) {
int left = 0, right = minsuDecks.length;
while (left < right) {
int mid = (left + right) / 2;
if (minsuDecks[mid] <= target) {
left = mid + 1;
} else {
right = mid;
}
}
while (left < minsuDecks.length && visited[left]) {
left++;
}
visited[left] = true;
return left;
}
}|
@kokeunho ์ ๋ ์คํ๋ ค ๊ทธ๋ฐ ์ ๊ทผ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ญ๊ฐ visited ๋ฐฐ์ด์ ์ฌ์ฉ ํ๋ ๊ฒ๊ณผ left๋ฅผ ++ ์์ผ์ ์ฌ์ฉํ์ง ์์ ๊ฒ ์ค์ answer์ธ ๋
์์ ์ฐพ๋ ๊ณผ์ ์ด ์ ๋ ํ์ด๋ ๋ ์ค๋ฅด์ง ์์์ด์ ๋ฐ๋ก ๋ต์ ๋ดค๋ ๊ฒ ๊ฐ๋ค์. ๋ฐ์ฑํฉ๋๋ค!!! ๊ทธ๋ฐ๋ฐ ์ต์
์ ์ผ์ด์ค์์๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ผํ ๊ฒ๊ฐ์๋ฐ.... ์ง๋ฌธ ๊ฒ์ํ์ ๋ณด๋ ๊ทผํธ๋๊ณผ ๋น์ทํ ๊ณ ๋ฏผ์ ํ๋ ์ฌ๋๋ค์ด ์๋ค์. |
๐ ๋ฌธ์ ๋งํฌ
[์นด๋ ๊ฒ์]
โ๏ธ ์์๋ ์๊ฐ
55m
(๋น ๋ฅด๊ฒ ๋ต ๋ดค์ต๋๋ค.)
โจ ์๋ ์ฝ๋
์ ๋์จ ํ์ธ๋์ ์์ฉ ์๊ณ ๋ฆฌ์ฆ์ ๋ค๊ณ ์๋ดค์ต๋๋ค.
์ ํฌ๊ฐ ์ด์ ์ ์ ๋์จ ํ์ธ๋ ๋ฌธ์ ๋ฅผ ๋ค๋ค๋์ง๋ ๊ธฐ์ต์ด ์๋๋๋ฐ, ์ฒด๊ฐ์ ๊ฑฐ์ ์ฒ์ ๋ง๋๋ณด๋ ์ ํ์ธ ๊ฒ ๊ฐ๋ค์.
์ ๋ ์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ์ฒ์์ ๋ค์๊ณผ ๊ฐ์ด ์ ๊ทผ ํ์ด์.
์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฒ ๊ฐ์์ง๋ง ๊ตฌํ์ด ์ฌ์ด ํธ์ด๋ผ ๋น ๋ฅด๊ฒ ์ ์ถ์ ํ ๋ฒ ํด๋ดค์ต๋๋ค.
์ญ์๋ ์๊ฐ์ด๊ณผ๋๋ผ๊ตฌ์.
upper_bound ๋ ์ด์ง ํ์์ผ๋ก O(log M) ์ด์ง๋ง, erase๊ฐ O(M) ์ด๊ธฐ ๋๋ฌธ์ด์์. (๋ฐฐ์ด ๋ค์๊ฒ์ ๋ค ๋น๊ฒจ์ค๊ธฐ ๋๋ฌธ)
๊ทธ๋ฆฌ๊ณ ์ง์๊ฐ ์ต๋ K๊ฐ ์์ผ๋.... O(K * (log M + M)) ์ด๋ค์.
M์ต๋๊ฐ 4,000,000 ์ด๊ณ K ์ต๋๊ฐ 10,000์ด๋ ์ฝ 4 * 10^10์ด๋ค์.. (๋ก๊ทธ ๋ฌด์ํ๊ณ ๊ณ์ฐ)
์ ๋์จ ํ์ธ๋๋ฅผ ํ์ฉํ๋ฉด ์๊ฐ ์ด๊ณผ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์๋ ์ ๋์จ ํ์ธ๋๋ ์๋ก์์ ์งํฉ์ ๊ด๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋๋ฐ์, ์ฌ๊ธฐ์ ํ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ์์ ์ด๊ณ , ๊ฐ์ด ๋ถ๋ชจ(์ฐ๊ฒฐ)์ธ ๋ฐฐ์ดํ ์๋ฃ๊ตฌ์กฐ๋ก 'ํ์ฌ ์ ํํ ์นด๋๋ณด๋ค ๋ฐ๋ก ์'์ ์นด๋๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํ ์ ์์ด์.
๋ง์ด ์ข ์ด๋ ต๋ค์..
์ด์ง ํ์์ผ๋ก blues์์ red๋ณด๋ค ํฐ ์นด๋๋ฅผ ๊ณ ๋ฅด๊ณ ,
๊ทธ ์นด๋๋ฅผ ์ฐพ๊ณ , ์ฌ์ฉํ๋ค๋ ํ์๋ฅผ ํ๋ ๊ฒ์ด์ฃ . (๋ถ๋ชจ ๋ ธ๋์ ์ด์ด์ค์ผ๋ก์จ ํ์๊ฐ ๊ฐ๋ฅ)
์ฐจ๊ทผ์ฐจ๊ทผ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ณด์๋ฉด ์ดํด๊ฐ ๋ ๊ฒ๋๋ค.
์๊ฐ์ ์ ํด๋๋๋ค๋ฉด ๊ตฌํ์ ๊ฝค๋ ์ฌ์ธ ๊ฒ ๊ฐ๋ค์.
์ฐธ๊ณ ๋ก ์ ๊ธฐ์ red๊ฐ 1์ ํ ๋ฒ ๋ ๋ธ๋ค๋ฉด blue๋ ๋ญ ๋ด์ผํ ๊น์??
...
์ด๋ ๊ฒ p[4] = 4 ๊น์ง ํ๊ณ ์ฌ๋ผ๊ฐ ๋ค์ ,
blues[4]์ธ 7์ ์ถ๋ ฅํ๊ณ ,
p[4] = 5 ๋ก ๋ฐ๊พธ์ด ์ฃผ๊ฒ ๋ ๊ฒ ์ ๋๋ค.
๐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ
์ค๋๋ง์ c++์๋ก์ด ๋ฌธ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค.
numeric์ ์๋ iota() ํจ์ ์ ๋๋ค.
iota(begin, end, startValue) ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ํด๋น ๋ฒกํฐ์ ์์ ๋ถํฐ ๋๊น์ง startValue๋ถํฐ ์์ํ์ฌ 1์ฉ ์ฆ๊ฐํ๋ ๊ฐ์ ๋ฃ์ ์ ์์ด์.
startValue == 0์ด๋ผ๋ฉด ->> ์ธ๋ฑ์ค = ๊ฐ์ด ๋๊ฒ ์ฃ .
๊ทผ๋ฐ iota๋ฅผ ๋ชฐ๋ผ๋
for(int i = 0; i < n; i++) p[i] = i;์ด๋ฌ๋ฉด ๋ ๊ฒ ๊ฐ๋ค์.