๐Ÿ’ป

[๋ฐฑ์ค€] ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - 1083. ์†ŒํŠธ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - 1083. ์†ŒํŠธ

๋˜ํšจ๋‹ˆ 2020. 2. 27. 12:02

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ N์ธ ๋ฐฐ์—ด A๊ฐ€ ์žˆ๋‹ค. ๋ฐฐ์—ด์— ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋‹ค. ์ด ๋ฐฐ์—ด์„ ์†ŒํŠธํ•  ๋•Œ, ์—ฐ์†๋œ ๋‘ ๊ฐœ์˜ ์›์†Œ๋งŒ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ตํ™˜์€ ๋งŽ์•„๋ด์•ผ S๋ฒˆ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ์†ŒํŠธํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ๋’ท์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ์›์†Œ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐ’์€ 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. S๋Š” 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

7

10 20 30 40 50 60 70

1

 

์˜ˆ์ œ ์ถœ๋ ฅ1

20 10 30 40 50 60 70

 

์˜ˆ์ œ ์ž…๋ ฅ2

5
3 5 1 2 4
2

 

์˜ˆ์ œ ์ถœ๋ ฅ2

5 3 2 1 4

 

์˜ˆ์ œ ์ž…๋ ฅ3

10
19 20 17 18 15 16 13 14 11 12
5

 

์˜ˆ์ œ ์ถœ๋ ฅ3

20 19 18 17 16 15 14 13 12 11

 

์ƒ๊ฐ

๋งจ ์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ํ’€์–ด์„œ ์˜ˆ์ œ ์ž…์ถœ๋ ฅ์„ ๋น„๊ตํ•ด๋ณด๋‹ˆ ๋งž๊ธธ๋ž˜ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋˜ ๊ฒŒ ๋งž๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 

์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋˜ ๊ฑฐ๋Š” ์ธ๋ฑ์Šค๋ฅผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ์ธ๋ฑ์Šค์™€ ๋น„๊ตํ•ด๊ฐ€๋ฉด์„œ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ ๋‹ต์ด ์ž˜ ๋‚˜์˜ค๊ธธ๋ž˜ ์ œ์ถœํ–ˆ๋”๋‹ˆ ํ‹€๋ ธ๋‹ค๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. 

 

๋ญ๊ฐ€ ์ž˜๋ชป๋๋‚˜ ์‹ถ์–ด์„œ ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์ž…๋ ฅ ์–ด์ฉŒ๊ตฌ ์ €์ฉŒ๊ตฌ ์‚ฌ์ „์‹ ์–ด์ฉŒ๊ตฌ ์ €์ฉŒ๊ตฌ ์—ฌ๋Ÿฌ ์งˆ๋ฌธ๊ธ€์ด ๋งŽ์•˜๋‹ค.

์˜ˆ์ œ ์ผ€์ด์Šค๊ฐ€ 3๊ฐœ๋‹ˆ๊น  while(~scanf("%d", &n)) ์จ์„œ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ๋œ๋‹ค... ํ•˜๊ธธ๋ž˜ ์ˆ˜์ •ํ•ด์„œ ์ œ์ถœํ–ˆ๋”๋‹ˆ ์ด๋ฒˆ์—๋Š” ์ถœ๋ ฅ ์ดˆ๊ณผ. ์ถœ๋ ฅ ์ดˆ๊ณผ ์ถœ๋ ฅ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ๊ฑด๋ฐ ์•”ํŠผ ๊ทธ๋ž˜์„œ ์ดํ•ด๋ฅผ ๋ชปํ–ˆ๋‹ค. 

 

+) ์ฒ˜์Œ์˜ ์ ‘๊ทผ(์˜ค๋‹ต)

๋”๋ณด๊ธฐ

#include <iostream>
using namespace std;


int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int n,s;
    
    while(~scanf("%d", &n)){
    
        int arr[n];
        for(int i=0; i<n; i++){
            cin >> arr[i];
        }
        
        cin >> s;
        int temp;
        while(s-->0){
            for(int i=0; i<n-1; i++){
                if(arr[i] < arr[i+1]){
                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    
                    break;
                }
            }
        }
        for(int j=0; j<n; j++){
           cout << arr[j] << " ";
        }
    }
    return 0;
}

๋งž์€ ๋ถ„ ํ’€์ด์™€ ์„ค๋ช…์„ ๋“ฃ๊ณ  ๋ฌธ์ œ๋ฅผ ์•„์˜ˆ ์ž˜ ๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์—ˆ๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค. ์˜ˆ์ œ ์ž…๋ ฅ๋“ค์ด ์ข€ ๋” ๋‹ค์–‘ํ–ˆ์œผ๋ฉด ์ข‹์•˜์„ ํ…๋ฐ ๋‚˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ถ„๋“ค๋„ ๋ฌธ์ œ๊ฐ€ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. 

 

์ถ”๊ฐ€์ ์œผ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ๋ฌธ์ œ ์ดํ•ด๋ฅผ ๋‹ค์‹œํ•ด๋ณด์ž.

์˜ˆ๋ฅผ ๋“ค๋ฉด, 

6

10 20 30 40 70 60 

5

 

1๋ฒˆ์งธ) 10 20 30 70 50 60 

2๋ฒˆ์งธ) 10 20 70 30 50 60 

3๋ฒˆ์งธ) 10 70 20 30 50 60 

4๋ฒˆ์งธ) 70 10 20 30 40 60

5๋ฒˆ์งธ) 70 20 10 30 40 60   --> ๊ฒฐ๊ณผ ์ถœ๋ ฅ 

 

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ณผ์ •์ด ์ „๊ฐœ๋œ๋‹ค. 

 

 

์ด์ œ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜์ž๋ฉด,

newSort() : ์ƒˆ๋กœ์šด ์ •๋ ฌ์„ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

l : ์ธ๋ฑ์Šค ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค.

max : ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค.

 

newSort()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ, newSort()์•ˆ์˜ ์ฒซ๋ฒˆ์งธ for ๋ฌธ์—์„œ j <= j+s ๋กœ ํ•˜๋Š” ์ด์œ ๋Š” s๋ฒˆ๊นŒ์ง€ ๊ตํ™˜ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, s๋ฒˆ ์•ˆ์— ์›์†Œ์˜ ๊ตํ™˜์„ ์™„๋ฃŒํ•ด์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ max๊ฐ’์„ ์ฐพ๊ณ  ๊ทธ ๋•Œ์˜ ์ธ๋ฑ์Šค j์˜ ๊ฐ’์„ l์— ์ €์žฅํ•œ๋‹ค. ๋งŒ์•ฝ l์ด i์™€ ๊ฐ™์ง€ ์•Š์œผ๋ฉด, for๋ฌธ์„ ๋Œ๋ฉด์„œ ์›์†Œ๋ฅผ ํ•œ์นธ์”ฉ ๋ฐ€์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  i๋ฒˆ์งธ์—๋Š” max๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ๋ฐ˜๋ณตํ•œ ํšŸ์ˆ˜(l-i) ๋งŒํผ s์—์„œ ๋นผ์ฃผ๊ณ  ์ด๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค. s๊ฐ€ 0์ด๋ฉด ๋น ์ ธ๋‚˜์˜จ๋‹ค. 

 

 

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

#include<iostream>

using namespace std;

int a[50];
int n, s;

void newSort() {
   for (int i = 0;i < n;i++) {
      int max = a[i];  // ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
      int l = i;	   // ๊ฐ€์žฅ ํฐ ๊ฐ’์ผ ๋•Œ, ๊ทธ ๋•Œ์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ 
      for (int j = i+1; j <= i + s; j++) {  
         if (j == n) break;	
         if (max < a[j]) {
            max = a[j];
            l = j;
         }
      }
      if (l != i) {
         for (int k = l; k > i; k--) { // ํ•œ ์นธ์”ฉ ๋ฐ€์–ด์ค€๋‹ค.
            a[k] = a[k - 1];
         }
         a[i] = max;
         s -= (l - i);
      }

      if (s == 0) break;
   }
}

int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n;
    
    for (int i = 0;i < n;i++){
        cin >> a[i];
    }
    cin >> s;
     
    newSort();

    for (int i = 0;i < n;i++){
        cout << a[i] << ' ';
    }
    return 0;
}

 

๋ฐ˜์‘ํ˜•
Comments