기본 정렬을 사용할 수 있는지 물어보는 문제
# 이코테 6-10
# N개의 정수 입력받아 리스트에 저장
array = []
for i in range(n):
array.append(int(input()))
# 파이썬 기본 정렬 라이브러리 이용하여 내림차순 정렬 수행
array = sorted(array, reverse=True)
# 결과출력
for i in range :
print(i, end=' ')
제한
입력
출력
예시
시간, 공간복잡도에 따라 알맞은 정렬을 적용할 수 있는가
학생정보 (점수, 이름)으로 묶어두고, 점수 기준 정렬 수행할 수 있는가
시간복잡도
학생의 정보가 최대 100,000개까지 입력되므로
최악의 경우 O(NlogN)을 사용해도된다.
혹은 O(N) 보장하는 계수정렬을 사용해도 공간복잡도도 괜찮다.
# 이코테 6-11
# 입력받기
n = int(input())
array=[]
for i in range(n) :
input_data = input().split()
# 이름은 문자열 그대로, 점수는 정수형으로 변환하여 전환
array.append(input_data[0], int(input_data[1]))
# key를 이용하여 점수를 기준으로 정렬
array = sorted(array, key=lambda student:student[1])
# 정렬이 수행된 결과를 출력
for student in array :
print(student[0], end=' ')
제한
입력
출력
바꿔치기?
예시
문제 요구조건을 맞추기 위해 기본아이디어 떠올릴 수 있는가 + 이걸 시간복잡도 계산해서 통과함을 보증할 수 있는가
기본아이디어
매번 배열 A에서 가장 작은 원소 골라서, 배열 B에서 가장 큰 원소와 교체
다만, A의 가장작은 원소 < B의 가장 큰 원소여야함
처음 든 생각
1. A와 B를 정렬해두고, 그때그때 큰 원소 선택하기
2. set으로 저장해두고, max()를 이용하여 그때그때 큰 원소 출력
-> 기각 : 중복된 데이터가 들어올 수 있어서 set() 사용 불가능
기본 아이디어
###########이코테 6-12############
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
b.sort(reverse=True)
# 첫번째 인덱스부터 확인하며, 두 배열의 원솔르 최대 K번 비교
for i in range(k) :
# A의 원소가 B의 원소보다 작은 경우
if a[i] < b[i] :
a[i], b[i] = b[i], a[i] # swap
# 종료조건 : A의 원소가 B의 원소보다 크거나 같을때
else :
break