Programming 기초/Coding Test
[이코테 # 정렬2] 기본 정렬 라이브러리를 활용한 문제들
코딩상륙작전
2023. 6. 9. 23:10
* 위에서 아래로(p.178)
제한시간 : 15분
입력할 수의 개수 n(1≤ n≤ 500)을 입력받고, 정렬대상의 1이상 100,000이하의 자연수의 수를 입력받는다.
# sort()함수를 사용한 풀이
n = int(input())
m = []
for i in range(n):
m.append(int(input()))
m.sort(reverse=True)
for i in range(len(m)):
print(m[i], end=" ")
# 정렬을 직접 구현한 버전
n = int(input())
m = []
for i in range(n):
m.append(int(input()))
for i in range(n):
max_index = i
for j in range(i + 1, n):
if m[max_index] <= m[j]:
max_index = j
m[i], m[j] = m[j], m[i]
for i in range(len(m)):
print(m[i], end=" ")
소요시간 : 5분/15분
정렬 대상의 개수 n이 (1≤ n≤ 500)이므로, 직관적이고 쉬운 n(n^2)의 시간복잡도를 가진 선택정렬을 구현했다.
* 성적이 낮은 순서로 학생 출력하기(p.180)
n = int(input())
array = []
for i in range(n):
array.append(list(input().split()))
array[i][1] = int(array[i][1])
array.sort(key=lambda data: data[1])
for i in range(n):
print(array[i][0], end=" ")
sort()함수를 sorted를 이용하면 아래와 같이 작성해야한다.
array=sorted(array, key=lambda data: data[1])
소요시간 : 5분/20분
< 오답노트 >
문법오류.
* 두 배열의 원소 교체(p.182)
n, k = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
A.sort()
B = sorted(B, reverse=True)
for i in range(k):
if A[i] < B[i]:
A[i], B[i] = B[i], A[i]
sum = 0
for i in range(n):
sum = sum + A[i]
print(sum)
소요시간 : 7분/20분
< 오답노트 >
문법오류.
구현 오류 : if 문을 이용하여 크기 비교하는 것을 놓침.
마지막에 sum을 기본 라이브러리 함수를 이용하자. 직접 구현할 필요 없음!
sum(A)은 리스트 내의 요소를 모두 더한 값을 반환한다.
# 두 배열의 원소 교체 2회차
n,k=map(int,input().split())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.sort()
b.sort(reverse=True)
print(sum(b[:k]+a[k:]))
시간 : 7분 /20분