-
[이코테 # 정렬2] 기본 정렬 라이브러리를 활용한 문제들Programming 기초/Coding Test 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분
'Programming 기초 > Coding Test' 카테고리의 다른 글
[이코테 # 다이나믹 프로그래밍1] 설명 및 메모이제이션 (0) 2023.06.13 [Python Tip#1] input()보다 sys.stdin.readline()의 처리속도가 더 빠르다. (0) 2023.06.11 [이코테 # 정렬1] 정렬 소스코드, 선택/삽입/퀵/계수 정렬, sorted()와 sort()의 차이 (0) 2023.06.09 [이코테 # DFS/BFS 2] 음료수 얼려 먹기(DFS), 미로탈출(BFS) (0) 2023.06.07 [이코테 # DFS/BFS 1] DFS, BFS 예제 (0) 2023.06.07