Algorithm/์ด๋ก
์ ํ, ๋ฒ๋ธ, ์ฝ์ ์ ๋ ฌ
vividswan
2022. 3. 9. 19:27
์ ๋ ฌ
์๊ฐ ๋ณต์ก๋ O(N^2)
์ธ ์ธ ๊ฐ์ง ์ ๋ ฌ์ ์์๋ณด์.
๋ชจ๋ N์ด 1~100 ์ฌ์ด๋ก ์ง์ ๋๊ณ , ์์์ N ๊ฐ์ ์ซ์๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ํ ์ ๋ ฌ
- ์ฒซ ๋ฒ์งธ for ๋ฌธ์ด
์ฒ์
๋ถํฐ๋
๊น์ง ์ํํ๋ค. - ์ฒซ ๋ฒ์งธ for ๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ idx๋ผ๋ ๋ณ์์ ์ ์ธํ๋ค.
- ๋ ๋ฒ์งธ for ๋ฌธ์ด ์ฒซ ๋ฒ์งธ for ๋ฌธ์ ๋ค์ ์ ๋ถํฐ ์ํํ๋ค.
- j์์ ์ํํ๋ ๋ฐฐ์ด์ ์๊ฐ idx ๋ฒ์งธ ๋ฐฐ์ด์ ์ ๋ณด๋ค ์์ผ๋ฉด idx๋ฅผ j๋ก ๋ฐ๊ฟ์ค๋ค.
- ๋ ๋ฒ์งธ ์ํ๊ฐ ๋๋๋ฉด idx ๋ฒ์งธ ์์ ์ฒซ ๋ฒ์งธ for ๋ฌธ์ i๋ฒ ์งธ ์๋ฅผ ์๋ก ๊ต์ฒดํ๋ค.
#include <iostream>
using namespace std;
int main(void) {
int arr[101];
int N;
cin >> N;
for (int i = 0; i < N; i++) cin >> arr[i];
for (int i = 0; i < N; i++) {
int idx = i;
for (int j = i + 1; j < N; j++) {
if (arr[j] < arr[idx]) idx = j;
}
int tmp = arr[i];
arr[i] = arr[idx];
arr[idx] = tmp;
}
for (int i = 0; i < N; i++) cout << arr[i] << ' ';
cout << 'endl';
}
๋ฒ๋ธ ์ ๋ ฌ
- ์ฒซ ๋ฒ์งธ for ๋ฌธ์ด
์ฒ์
๋ถํฐ๋-1
๊น์ง ์ํํ๋ค. - ๋ ๋ฒ์งธ for ๋ฌธ์ ํญ์
์ฒ์
๋ถํฐ๋ - i - 1
๊น์ง ์ํํ๋ค. - ๋ ๋ฒ์งธ for ๋ฌธ์ j๋ฒ ์งธ ์๊ฐ j + 1 ๋ฒ์งธ ์ ๋ณด๋ค ํฌ๋ค๋ฉด ๋ ์๋ฅผ swap ํ๋ค.
- ๋ ๋ฒ์งธ for ๋ฌธ์ด ๋๋๋ฉด ๊ฐ์ฅ ํฐ ์๊ฐ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์์นํ๊ฒ ๋๋ค.
- ์ด๋ฅผ ์ฒซ ๋ฒ์งธ for ๋ฌธ์ ํ์๋งํผ ๋ฐ๋ณตํ๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
#include <iostream>
using namespace std;
int main(void) {
int N;
cin >> N;
int arr[101];
for (int i = 0; i < N; i++) cin >> arr[i];
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
for (int i = 0; i < N; i++) cout << arr[i] << ' ';
return 0;
}
์ฝ์ ์ ๋ ฌ
- ์ฒซ ๋ฒ์งธ for ๋ฌธ์ด
์ฒ์+1
๋ถํฐ๋
๊น์ง ์ํํ๋ค. - ๋ ๋ฒ์งธ for ๋ฌธ์ ํญ์
i-1
๋ถํฐ0
๊น์ง ๋ฐ๋๋ก ์ํํ๋ค. - ๋ ๋ฒ์งธ for ๋ฌธ์ ์์ํ ๋, ์ฒซ ๋ฒ์งธ for ๋ฌธ ์ธ๋ฑ์ค์ ์๋ฅผ tmp์ ์ ์ฅํ๋ค.
- tmp์ ์ ์ฅ๋ ์ ๋ณด๋ค j์ ์๋ ์๊ฐ ํฌ๋ค๋ฉด j+1์ j ๋ฒ์งธ ์๋ฅผ ์ฝ์ ํ๋ค.
- ํฌ์ง ์๋ค๋ฉด for ๋ฌธ์ ์ข ๋ฃํ๊ณ ๋ง์ง๋ง์ผ๋ก ๋์๋ j์ ๋ค์ ์ธ๋ฑ์ค์ tmp์ ๊ฐ์ ์ฝ์ ํ๋ค.
- for ๋ฌธ์ด break ์์ด ๋์๋ค๋ฉด -1 + 1์ธ 0๋ฒ์งธ ์ธ๋ฑ์ค์ tmp๊ฐ ์ฝ์ ๋๋ค.
- ์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด, ์ฒซ ๋ฒ์งธ for ๋ฌธ์ด ์งํ๋ ๋๋ง๋ค ํฐ ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ณ tmp๋ ์์ ์ ์์์ ๋ง๊ฒ ์ฝ์ ๋๋ค.
#include <iostream>
using namespace std;
int main(void) {
int N;
cin >> N;
int arr[101];
for (int i = 0; i < N; i++) cin >> arr[i];
for (int i = 1; i < N; i++) {
int tmp = arr[i];
int j;
for (j = i - 1; j >= 0; j--) {
if (tmp < arr[j]) arr[j + 1] = arr[j];
else break;
}
arr[j + 1] = tmp;
}
for (int i = 0; i < N; i++) cout << arr[i] << ' ';
return 0;
}