๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/์ด๋ก 

์„ ํƒ, ๋ฒ„๋ธ”, ์‚ฝ์ž… ์ •๋ ฌ

์ •๋ ฌ

์‹œ๊ฐ„ ๋ณต์žก๋„ 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;
}