[이코테] 정렬
1. 위에서 아래로
- 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다. (1<= N<= 500)
- 둘째 줄부터 N+1 번째 줄까지 N개의 수가 입력된다. 수의 범위는 1 이상 100,000 이하의 자연수
출력 조건 : 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다.
1.1 내 답안
n = int(input())
num_list=[]
for _ in range(n):
num_list.append(int(input()))
num_list = sorted(num_list, reverse=True)
for i in num_list:
print(i, end=' ')
- 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다. (1<= N<= 500)
- 둘째 줄부터 N+1 번째 줄까지 N개의 수가 입력된다. 수의 범위는 1 이상 100,000 이하의 자연수
출력 조건 : 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다.
n = int(input())
num_list=[]
for _ in range(n):
num_list.append(int(input()))
num_list = sorted(num_list, reverse=True)
for i in num_list:
print(i, end=' ')
2. 성적 낮은 순서로 학생 출력하기
- 첫째 줄에 학생 수 N이 입력됨. (1<= N<= 100,000)
- 둘째 줄부터 N+1 번째줄에 학생 이름을 나타내는 문자열 A와 성적을 나타내는 정수 B가 공백으로 구분되어 입력됨. 문자열 A의 길이와 성적은 100이하의 자연수
출력조건 : 모든 학생의 이름을 성적이 낮은 순서대로 출력. (성적이 동일하면 자유롭게 출력)
2.1 내 답안
n = int(input())
list = []
for i in range(n):
name, score = input().split()
list.append((name, int(score)))
list.sort(key=lambda x : x[1])
for i in range(n):
print(list[i][0], end=' ')
2.2 책 답안
- 학생이 최대 100,000명까지 입력될 수 있으므로 최악의 경우 O(NlogN)을 보장하는 정렬알고리즘을 쓰거나 O(N)을 보장하는 계수 정렬을 쓰면 됨.
n = int(input())
array = []
for i in range(n):
input_data = input().split()
list.append((input_data[0], int(input_data[1])))
array = sorted(array, key=lambda student: student[1])
for student in array:
print(student[0], end=' ')
- 첫째 줄에 학생 수 N이 입력됨. (1<= N<= 100,000)
- 둘째 줄부터 N+1 번째줄에 학생 이름을 나타내는 문자열 A와 성적을 나타내는 정수 B가 공백으로 구분되어 입력됨. 문자열 A의 길이와 성적은 100이하의 자연수
출력조건 : 모든 학생의 이름을 성적이 낮은 순서대로 출력. (성적이 동일하면 자유롭게 출력)
n = int(input())
list = []
for i in range(n):
name, score = input().split()
list.append((name, int(score)))
list.sort(key=lambda x : x[1])
for i in range(n):
print(list[i][0], end=' ')
n = int(input())
array = []
for i in range(n):
input_data = input().split()
list.append((input_data[0], int(input_data[1])))
array = sorted(array, key=lambda student: student[1])
for student in array:
print(student[0], end=' ')
3. 두 배열의 원소 교체
- 첫째 줄에 N, K가 공백으로 구분되어 입력된다. (1<= N<= 100,000) (1<= K<= N)
- 둘째 줄에 배열 A의 원소들이 공백으로 구분되어 입력됨. (모든 원소는 10,000,000 보다 작은 자연수)
- 셋째 줄에 배열 B의 원소들이 공백으로 구분되어 입력됨. (모든 원소는 10,000,000 보다 작은 자연수)
출력조건 : 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 A의 모든 원소의 합의 최댓값
3.1 내 답안
- 처음 실수 ) 최대 K번인데 무조건 K번 바꿔치기 하는걸로 풀음.
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a = sorted(a)
b = sorted(b, reverse=True)
result = 0
count = 0
for i in range(n):
if a[i] < b[i]:
result += b[i]
count += 1
if count == 3:
break
result += sum(a[count:])
print(result)
- 첫째 줄에 N, K가 공백으로 구분되어 입력된다. (1<= N<= 100,000) (1<= K<= N)
- 둘째 줄에 배열 A의 원소들이 공백으로 구분되어 입력됨. (모든 원소는 10,000,000 보다 작은 자연수)
- 셋째 줄에 배열 B의 원소들이 공백으로 구분되어 입력됨. (모든 원소는 10,000,000 보다 작은 자연수)
출력조건 : 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 A의 모든 원소의 합의 최댓값
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a = sorted(a)
b = sorted(b, reverse=True)
result = 0
count = 0
for i in range(n):
if a[i] < b[i]:
result += b[i]
count += 1
if count == 3:
break
result += sum(a[count:])
print(result)
3.2 책 답안
- a오름차순, b내림차순 일때 a[i]>= b[i]이기만 하면 break 해도 된다는 걸 생각 못함.
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
b.sort(reverse=True)
for i in range(k):
if a[i] < b[i]:
a[i], b[i] = b[i], a[i]
else:
break
print(sum(a))
Author And Source
이 문제에 관하여([이코테] 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hong_journey/이코테-정렬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)