본문 바로가기

백준/Silver(1~5)

[백준]_1427번 : 소트인사이드(파이썬 and C언어)

728x90
반응형
 

1427번: 소트인사이드

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

단순히 존재하는 숫자들을 1자리 숫자로 쪼갠 뒤 내림차순으로 정렬하면 되는 문제이다. 


전략

 쪼갠 원소(1234 -> 1, 2, 3, 4 )들을 배열 안으로 넣은 뒤 내림차순으로 정렬하는 과정을 통해 최종 답을 도출해 낸다. 

시도 1(Python)

import sys

input = sys.stdin.readline

num = list(input().strip())
arr = []
for i in num:
    arr.append(int(i))
arr.sort(reverse=True)
print(''.join(str(n) for n in arr))

<평가> 웬만한 실버 문제가 이런 내장함수만 가지고 쉽게 풀리는 경우가 별로 없는데 이 문제는 다행히도 빨리 풀렸다.

 

추가 정리

join() 매서드에 대해 더 알아보자.

  • ' '으로 빈 문자열을 생성해 준다.
  • 빈 문자열 안으로 넣을 요소들을 join()을 통해 합쳐준다. 단 반드시 그 요소들은 문자형이어야 한다. 따라서 str(n)을 붙여준다.
  • arr 안에 있는 모든 요소들을 for을 통해 꺼내준다.

시도 2(C)

#include <stdio.h>
#include <string.h>
int main() 
{
    char arr[10];
    char tmp;
    scanf("%s",arr);
    int size=strlen(arr);
	
	for(int i=0;i<size-1;i++)
		for(int j=0;j<size;j++)
		{
			if(arr[j]<arr[j+1])
			{
				tmp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=tmp;
			}
		}
	
    printf("%s",arr);
    return 0;
}

입력될 숫자는 최대 10자리 숫자이므로 크기 10짜리 배열을 선언해주고 입력된 숫자의 자릿수를 strlen()을 통해 받는다. 마지막으로 버블 정렬을 통해 내림차순으로 정렬해 준다.

728x90
반응형