Coding/이코테

[이코테]정렬 문제 풀이(성적이 낮은 순서로 학생 출력하기, 두 배열의 원소 교체)

seomj 2023. 7. 6. 18:24

성적이 낮은 순서로 학생 출력하기

N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.

 

n = int(input())
array = []

for _ in range(n):
    name, score = input().split()
    array.append((name, int(score)))

array = sorted(array, key=lambda student: student[1])

for student in array:
    print(student[0], end = ' ')

람다를 사용하여 리스트를 정렬할 수 있다.

사실 난 처음에 딕셔너리로 풀었으나 리스트 답안이 더 깔끔하며 방식은 똑같다.

lambda를 사용해서 score인 student[1]로 sorted를 수행한 뒤 name인 student[0]만 뽑아서 출력한다.


두 배열의 원소 교체

동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다. 동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야 한다.

N, K, 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하시오.

예를 들어 N = 5, K = 3이고 배열 A와 B가 다음과 같다고 하자.

- 배열 A = [1, 2, 5, 4, 3]

- 배열 B = [5, 5, 6, 6, 5]

이 경우, 다음과 같이 세 번의 연산을 수행할 수 있다.

1. 배열 A의 원소 '1'과 배열 B의 원소 '6'을 바꾸기

2. 배열 A의 원소 '2'과 배열 B의 원소 '6'을 바꾸기

3. 배열 A의 원소 '3'과 배열 B의 원소 '5'을 바꾸기

세 번의 연산 이후 배열 A와 배열 B의 상태는 다음과 같이 구성될 것이다.

- 배열 A = [6, 6, 5, 4, 5]

- 배열 B = [3, 5, 1, 2, 5]

이때 배열 A의 모든 원소의 합은 26이 되며, 이보다 더 합을 크게 만들 수는 없다. 따라서 이 예시의 정답은 26이 된다.

 

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))

a에서 가장 작은 수들과 b에서 가장 큰 수들을 교체해주면 된다.

그렇기 때문에 a에서는 오름차순으로, b에서는 내림차순으로 정렬을 한다.

그러면 b의 앞에는 큰 수가 위치하게 될 것이고 a의 앞에는 작은 수가 위치하게 된다.

이를 각각 비교하여 교체해주면 된다.

 

 

 

<출처>

이것이 취업을 위한 코딩테스트다 with 파이썬