이것이 코딩테스트다. 182페이지문제이다.
시간체한이 2초인 문제였다.
아래는 나의 코드이다.
import sys
M,N= map(int,sys.stdin.readline().split())
A=list(map(int,sys.stdin.readline().split()))
B=list(map(int,sys.stdin.readline().split()))
for i in range(N):
min_a= min(A)
max_b= max(B)
A.remove(min_a)
A.append(max_b)
B.remove(max_b)
B.append(min_a)
print(sum(A))
시간이 꽤 걸리는 코드이다. 지금보니 N과 리스트 크기에 따라 시간초과가 날수도 있을 듯하다....
아래는 예시코드이다.
n, k = map(int, input().split()) # N과 K를 입력 받기
a = list(map(int, input().split())) # 배열 A의 모든 원소를 입력받기
b = list(map(int, input().split())) # 배열 B의 모든 원소를 입력받기
a.sort() # 배열 A는 오름차순 정렬 수행
b.sort(reverse=True) # 배열 B는 내림차순 정렬 수행
# 첫 번째 인덱스부터 확인하며, 두 배열의 원소를 최대 K번 비교
for i in range(k):
# A의 원소가 B의 원소보다 작은 경우
if a[i] < b[i]:
# 두 원소를 교체
a[i], b[i] = b[i], a[i]
else: # A의 원소가 B의 원소보다 크거나 같을 때, 반복문을 탈출
break
print(sum(a)) # 배열 A의 모든 원소의 합을 출력
근데 이 예시코드대로 하면
A에서 B로 넘어온 숫자가 B에서 가장 크면 다음번 교체에서 다시 A로 가야하는데 그 부분에 대해 처리를 안한 것같은데...?
아! 아니네.. if문에서 비교를 해서 a가 더 큰 상황이면 안바꾸구나, 그리고 그 때가 최선일 때구나
'Problem Solving > 정렬' 카테고리의 다른 글
광물 캐기 (1) | 2023.10.16 |
---|---|
BOJ1946 신입 사원 (0) | 2023.04.06 |
BOJ1931 회의실 배정(R) (0) | 2023.03.20 |
성적이 낮은 순서로 학생 출력하기 (0) | 2023.01.04 |
위에서 아래로 (0) | 2023.01.04 |