1번.
하나의 수열에는 다양한 수가 존재한다. 이러한 수는 크기에 상관없이 나열되어 있다. 이 수를 큰 수부터 작은 수의 순서로 정렬해야 한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오.
풀이)
기본 정렬 알고리즘 사용하기
n = int(input())
array = []
for i in range(n):
array.append(int(input()))
array = sorted(array, reverse=True)
for i in array:
print(i, end=' ')
2번)
N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.
n = int(input())
array = []
for i in range(n):
input_data = input().split() #이렇게하면 ['홍길동', '95'] 리스트 형태로 된다.
array.append((input_data[0], input_data[1]))
array = sorted(array, key=lambda student: student[1])
for student in array:
print(student[0], end=' ')
sorted()메서드에서 key를 사용할 때 함수형식으로 써야한다. 여기서는 람다를 사용해서 함수를 생성했는데 사용법을 알아보겠다.
람다 사용법
함수를 딱 한 줄만으로 만들게 해주고, 사용할 때는 아래와 같이 써주면 된다.
lambda 인자 : 표현식
다음은 두 수를 더하는 함수이다.
def hap(x, y):
... return x + y
...
hap(10, 20)
30
이것을 람다 형식으로는 어떻게 표현할까?
(lambda x,y: x + y)(10, 20)
30
3번)
동빈이는 두 배열 A, B를 가진다. 두 배열은 N개의 원소로 구성되며 모두 자연수이다. 최대 K번의 바꿔치기 연산이 수행 가능한데, A원소 하나 B원소 하나를 골라서 서로 바꾸는 것을 말한다. 목표는 A모든 원소 합이 최대를 만드는 것이다. 최댓값을 구하는 프로그램을 작성하시오.
풀이)
만드려면 A에서 가장 작은 것을 골라서 B에서 가장 큰 것과 교체를 해야한다.
n,k = map(int, input().split())
a= list(map(int, input().split()))
b= list(map(int, input().split()))
a.sort() #작은것부터 나열
b.sort(reverse=True) #큰것부터 나열
for i in range(k):
if a[i] < b[i]:
a[i], b[i] = b[i], a[i]
else: #크거나 같아지게 되면 그때부터는 변경할 요소가 없으니 반복문 탈출
break
print(sum(a)) #배열의 합 구하기