📚 문제
링크: https://www.acmicpc.net/problem/1427
1427번: 소트인사이드
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
💡 접근법
정렬할 리스트에서 최댓값을 찾은 뒤 현재값과 swap하는 선택 정렬 알고리즘을 이용하여 구현하였다.
선택 정렬이란?
대상 데이터에서 최대나 최소 데이터를 데이터가 나열된 순으로 찾아가며 선택하는 방법이다.
💻 코드
1) 전체 코드
import sys
nums = sys.stdin.readline().strip()
num_list = []
for n in nums:
num_list.append(int(n))
for i, n in enumerate(num_list):
max_value = max(num_list[i:])
max_idx = num_list.index(max_value)
num_list[max_idx], num_list[i] = n, str(max_value)
print(''.join(num_list))
2) 해설
(1) 패키지 Import
import sys
파이썬 내장 함수인 input()보다 빠르게 값을 입력받기 위해 sys 라이브러리를 사용하였다.
(2) 입력받기
nums = sys.stdin.readline().strip()
num_list = []
for n in nums:
num_list.append(int(n))
문자열을 입력받고 각각의 문자에 접근해 int로 형변환을 해주었다.
(3) 선택 정렬 구현
for i, n in enumerate(num_list):
max_value = max(num_list[i:])
max_idx = num_list.index(max_value)
num_list[max_idx], num_list[i] = n, str(max_value)
파이썬 내장함수 max()를 이용하여 정렬할 리스트 내에서 최댓값을 찾고, 최댓값에 대한 인덱스를 구했다.
이후 현재값과 최댓값을 swap하였다. 최댓값을 str로 형변환한 이유는 아래에서 출력할 때 join을 사용하기 위함이다.
(4) 출력하기
print(''.join(num_list))
join()을 이용하여 리스트 내의 각각의 문자를 하나의 문자열로 합쳐서 출력하였다.
사실 end='' or *num_list를 사용하여 출력하고 싶었으나 출력 결과를 확인하니 마지막에 %가 붙어 출력되어 오답으로 처리되었다.
따라서 최후의 방법으로 join을 사용하여 출력하게 되었다.
✅ 정답 확인
포스팅한 내용에 대한 조언/지적/피드백 모두 환영입니다!
읽어주셔서 감사합니다^.^
'Algorithm > Baekjoon' 카테고리의 다른 글
[DFS] 백준 #13023 친구 관계 파악하기 - Python (2) | 2023.10.09 |
---|---|
[DFS] 백준 #2023 신기한 소수 찾기 - Python (1) | 2023.10.09 |
[DFS] 백준 #11724 연결 요소의 개수 구하기 - Python (0) | 2023.10.09 |
[정렬] 백준 #10989 수 정렬하기 3 - Python (0) | 2023.10.03 |
[정렬] 백준 #11399 ATM 인출 시간 계산하기 - Python (0) | 2023.10.01 |