[이코테] 정렬

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=' ')



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=' ')



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)



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))

좋은 웹페이지 즐겨찾기