갬미의 성장일기
[이것이 코딩테스트다] 13일차 - 정렬 예제풀이 본문
본문은 [이것이 취업을 위한 코딩테스트다 - 나동빈] 책을 공부하고 작성한 글입니다.
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))
그리 어렵지 않은 문제라 빠르게 풀었다
내가 생각한 풀이와 저자가 명시한 풀이가 거의 비슷해서 뿌듯했다!
연습문제 풀이는 깃허브에도 업로드 되어있습니다
'Algorithm > Algorithm Study' 카테고리의 다른 글
[이것이 코딩테스트다] 15일차 - 우선순위 큐 | 백준 카드정렬하기 (0) | 2021.12.18 |
---|---|
[이것이 코딩테스트다] 14일차 - 백준 국영수, 안테나 | 프로그래머스 실패율 (0) | 2021.12.17 |
[이것이 코딩테스트다] 13일차 - 정렬 (0) | 2021.12.15 |
[이것이 코딩테스트다] 12일차 - 백준 연산자 끼워넣기, 인구이동 (0) | 2021.12.14 |
[이것이 코딩테스트다] 11일차 - 프로그래머스 괄호변환 (0) | 2021.12.12 |
Comments