갬미의 성장일기

[이것이 코딩테스트다] 13일차 - 정렬 예제풀이 본문

Algorithm/Algorithm Study

[이것이 코딩테스트다] 13일차 - 정렬 예제풀이

갬미 2021. 12. 15. 23:45

본문은 [이것이 취업을 위한 코딩테스트다 - 나동빈] 책을 공부하고 작성한 글입니다.

Chapter 6 정렬

오늘 풀이한 문제 - 정렬 예제

1. 위에서 아래로

문제

하나의 수열에는 다양한 수가 존재한다, 이러한 수는 크기에 상관없이 나열되어 있다.
이수를 큰수부터 작은수의 순서로 정렬해야한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오

Data = [15, 27, 12]
data = sorted(Data, reverse  = True)
for d in data:
    print (d, end = ' ')

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

문제

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

N = int(input())
Data ={}
for i in range (N):
    name, score = input().split()
    Data[name] = int(score)
    
for i in (sorted (Data, key = lambda x:x[1], reverse = True)) :
    print (i, end = ' ')

3. 두 배열의 원소 교체 

문제

동빈이는 두 개의 배열 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이 되며, 이보다 더 합을 크게 만들 수는 없다
n = 3
k = 5 
a = [1, 2, 5, 4, 3]
b= [5, 5, 6, 6, 5]

a.sort()
b.sort(reverse=True) # 내림차순 정렬 수행

for idx in range (n):
    if a[idx] < b[idx]:
        a[idx], b[idx] = b[idx], a[idx]
    else:
        break
        
print(sum(a))

 

그리 어렵지 않은 문제라 빠르게 풀었다

내가 생각한 풀이와 저자가 명시한 풀이가 거의 비슷해서 뿌듯했다!

 

연습문제 풀이는 깃허브에도 업로드 되어있습니다 

 

GitHub - gymin97/algorithm_study: Solve the algorithm problems (python3)

Solve the algorithm problems (python3). Contribute to gymin97/algorithm_study development by creating an account on GitHub.

github.com

 

Comments