http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=216&sca=10c0

 

JUNGOL | 함수2 - 자가진단1 > 문제은행

경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호 TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com Copyrightⓒ 2010-2019 jungol. All right reserved. TOP

www.jungol.co.kr

선택 정렬 사용해서 풀기,

가장 작은 값을 찾아서, 제일 오른쪽 끝으로 옮기는 방식으로 해결

 

#include <bits/stdc++.h>
using namespace std;
/*
함수2 - 자가진단 1
*/

void f(int a[], int n){ //int *b
    //내림차순

    int min;
    for(int i=0;i<n;i++)
    {
        min = 99;
        int min_idx = 0;
        for(int j=0;j<n-i;j++){
          if(min>a[j]){
            min=a[j];
            min_idx = j;
          }
        }
        int temp= a[min_idx];
        a[min_idx] = a[n-i-1];
        a[n-i-1] = temp;
    }
}

int main()
{
    int a[10];
    int n;
    scanf("%d",&n);

    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    f(a, n);  //배열의 이름은 배열의 시작 주소다.ㅁ

    for(int i=0;i<n;i++){
        printf("%d ", a[i]);
    }

    return 0;
}

 

위 코드에서  swap() 함수를 사용한 것으로 개선

https://en.cppreference.com/w/cpp/algorithm/swap

불러오는 중입니다...
#include <bits/stdc++.h>
using namespace std;
/*
함수2 - 자가진단1
*/

void f(int a[], int n){ //int *b
    //내림차순

    int min;
    for(int i=0;i<n;i++)
    {
        min = 99;
        int min_idx = 0;
        for(int j=0;j<n-i;j++){
          if(min>a[j]){
            min=a[j];
            min_idx = j;
          }
        }
        /*
        int temp= a[min_idx];
        a[min_idx] = a[n-i-1];
        a[n-i-1] = temp;
        */
        swap(a[min_idx], a[n-i-1]);

    }
}

int main()
{
    int a[10];
    int n;
    scanf("%d",&n);

    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    f(a, n);  //배열의 이름은 배열의 시작 주소다.ㅁ

    for(int i=0;i<n;i++){
        printf("%d ", a[i]);
    }

    return 0;
}

 

 

선택 정렬 사용해서 풀기 2,

가장 큰 값을 찾아서, 제일 왼쪽 끝으로 옮기는 방식으로 해결

 

#include <bits/stdc++.h>
using namespace std;
/*
함수2 - 자가진단1
*/

void f(int a[], int n){ //int *b
    //내림차순

    int max;
    for(int i=0;i<n;i++)
    {
        max = -1000;
        int max_idx = 0;
        for(int j=i;j<n;j++){
          if(max<a[j]){
            max=a[j];
            max_idx = j;
          }
        }
        /*
        int temp= a[min_idx];
        a[min_idx] = a[n-i-1];
        a[n-i-1] = temp;
        */
        swap(a[max_idx], a[i]);

    }
}

int main()
{
    int a[10];
    int n;
    scanf("%d",&n);

    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    f(a, n);  //배열의 이름은 배열의 시작 주소다.ㅁ

    for(int i=0;i<n;i++){
        printf("%d ", a[i]);
    }

    return 0;
}

'정보올림피아드-KOI > 기초 문법 문제' 카테고리의 다른 글

231 : 함수3 - 형성평가1  (0) 2020.02.16
232 : 함수3 - 형성평가2  (0) 2020.02.16
174 : 함수1 - 형성평가5  (0) 2020.02.16
173 : 함수1 - 형성평가4  (0) 2020.02.16
172 : 함수1 - 형성평가3  (0) 2020.02.16

+ Recent posts