[BOJ] 1083_소트

ProblemSolving / / 2021. 3. 1. 23:45

소트

문제 링크: https://www.acmicpc.net/problem/1083

 

1083번: 소트

크기가 N인 배열 A가 있다. 배열에 있는 모든 수는 서로 다르다. 이 배열을 소트할 때, 연속된 두 개의 원소만 교환할 수 있다. 그리고, 교환은 많아봐야 S번 할 수 있다. 이때, 소트한 결과가 사전

www.acmicpc.net

성공

 

버블소트를 응용하여 배열을 정렬한다.
'소트한 결과가 사전순으로 가장 뒷서는 것을 출력한다.'
즉, 크기가 큰 순서대로 정렬하다가 s번 정렬 했을 시 해당 순서를 출력하라는 의미이다.

 

  • 정답 코드

      #include<iostream>
      using namespace std;
    
      #define maxNum 51
    
      int n, s;
      int list[maxNum];
    
      void sorting() {
          for (int i = 0; i < n && s; i++) {
              int max = list[i], maxIdx = i;
              int  count = min(n, i + 1 + s);
    
              for (int k = i+1; k < count && s; k++) {
                  if (max < list[k]) {
                      if (max < list[k]){
                          max = list[k];
                          maxIdx = k;
                      }
                  }
              }
              s -= maxIdx - i;
    
              for (int k = maxIdx; k > i; k--)
                  list[k] = list[k - 1];
    
              list[i] = max;
          }
      }
    
      int main() {
          cin >> n;
          for (int i = 0; i < n; i++)
              cin >> list[i];
          cin >> s;
    
          sorting();
    
          for (int i = 0; i < n; i++)
              cout << list[i] << ' ';
    
          return 0;
      }

'ProblemSolving' 카테고리의 다른 글

[BOJ] 1715_카드 정렬하기  (0) 2021.03.04
[BOJ] 2697_다음수 구하기  (0) 2021.03.04
[BOJ] 1322_X와 K  (0) 2021.02.27
에라토스테네의 체  (0) 2021.02.26
[BOJ] 12865_평범한 배낭  (0) 2021.02.25
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기