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분