본문 바로가기
코딩테스트/이코테

[CH6 정렬] 위에서 아래로

by 의정부핵꿀밤 2022. 1. 7.
728x90

아고,,, 이코테 너무 오랜만에 오네,,,

맨날 코테 공부를 하긴 했는데 스터디하느라 바빠서ㅠㅠ

그래서 프로그래머스 1개 풀자마자 달려왔으니까 너무 속상해하지마 이코테~~(아님)

이코테..!


문제 설명

하나의 수열에는 다양한 수가 존재한다

이러한 수는 크기에 상관없이 나열되어 있다

이 수를 큰 수부터 작은 수의 순서로 정렬해야 한다

수열을 내림차순으로 정렬하는 프로그램을 만드시오

 

 

입력 조건

  • 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다 (1<=N<=500)
  • 둘째 줄부터 N+1번째 줄까지 N개의 수가 입력된다
  • 수의 범위는 1 이상 100,000 이하의 자연수이다

 

출력 조건

  • 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다
  • 동일한 수의 순서는 자유롭게 출력하여도 괜찮다

 

입력 예시

3

15

27

12

 

출력 예시

27 15 12

 


문제 풀이)

이 문제는 가장 기본적인 정렬을 할 수 있는지를 물어보는 문제이다

수의 개수가 500개 이하로 매우 적으며, 1이상 100,000이하이므로 어떠한 정렬 알고리즘을 사용해도 문제 해결이 가능하다!

이전에 공부한 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 중 아무거나 이용해도 상관없지만 파이썬의 경우 가장 코드가 간결한 기본 정렬 라이브러리를 사용하면 된다

 

파이썬 코드)

# N을 입력받기
n = int(input())

# N개의 정수를 입력받아 리스트에 저장
array = []
for i in range(n):
    array.append(int(input()))

# 파이썬 기본 정렬 라이브러리를 이용하여 정렬 수행
array = sorted(array, reverse=True)

# 정렬이 수행된 결과를 출력
for i in array:
    print(i, end=' ')

reverse = True 를 사용해서 내림차순 정렬

여기서 그냥 print(array) 했는데 이는 출력 조건에 맞지 않아서 반복문으로 다시 출력함!

 

파이썬 결과화면

 

C++ 코드)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool compare(int a, int b) 
{
    return a > b;
}
int main()
{
    int n;
    vector<int> v;
    
    cin>>n;
    
    for(int i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        v.push_back(temp);
    }
    
    sort(v.begin(), v.end(), compare);

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

짠 C++에서는 vector를 이용해서 구현했어

#include <algorithm> 헤더파일에 있는 sort 함수랑 compare 함수 사용해서 내림차순 정렬함!

여기서 compare는 정렬 기준이야!

 

sort 함수 정렬 기준 바꾸는 건 아래 블로그 참고하기!

https://foxtrotin.tistory.com/93

 

std::sort 정렬 기준 바꾸기

문제 풀 때마다 맨날 헷갈려서 정리했음 1. 일반 배열 내림차순 정렬 #include #include using namespace std; int n, a[10]; bool compare2(const int&x, const int&y) { return x > y; } int main() { scanf("%d..

foxtrotin.tistory.com


짱쉬운 문제였다

그럼 빠잉!

728x90

댓글