Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 오픽
- English
- 메모이제이션
- XML주석
- 오픽점수잘받는방법
- 바텀업
- 오픽노잼공부방법
- 이진탐색 #나무 자르기
- 탑다운
- 안드로이드주석
- 주석
- 다이나믹프로그래밍
- 오픽공부법
- topdown
- 오픽가격
- 영어회화
- 오픽노잼
- 영어말하기
- dp
- XML
- stack 스택
- 이진탐색
- dynamicProgramming
- opic
- 안드로이드
- ㅂ
- fibo
- 디피
- 피보나치수열
Archives
RUBY
두 배열의 원소 교체 본문
출처:: 국제 알고리즘 대회
1. 문제 이해 및 해결과정
2번 풀이
- 두 배열의 원소가 최대 백만개 100,000개 까지 입력될 수 있으므로O(NlogN)을 보장하는 정렬알고리즘을 이용해야한다.
2. 풀이방법
1. 정렬 이용
#두 배열의 원소 교체
#
import sys
sys.stdin = open("input.txt","r")
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))
3. 오답원인
1. n이 커지면 풀릴지 모르겠다 - 안풀림
- 10억이면 1초 이상
O(n^2) = 100 000 * 100 000 = 10 000 000 000 백억이므로 2초안에 풀 수 없음
#두 배열의 원소 교체
#
import sys
sys.stdin = open("input.txt","r")
n,k=map(int,input().split())
A=list(map(int,input().split()))
B=list(map(int,input().split()))
for i in range(k):
minv= 2147000000
maxv = -1
for j in range(n):
if minv>A[j]:
minindex=j
minv=A[minindex]
if maxv < B[j]:
maxindex=j
maxv=B[maxindex]
A[minindex],B[maxindex] = B[maxindex],A[minindex]
print(sum(A))
4. 알게된 점
'PS > This' 카테고리의 다른 글
[백준] 떡볶이 떡 만들기 (0) | 2020.08.05 |
---|---|
부품 찾기 (0) | 2020.08.04 |
성적이 낮은 순서로 학생 출력하기 (0) | 2020.08.04 |
위에서 아래로 (0) | 2020.08.04 |
[이론] 정렬 (0) | 2020.08.04 |
Comments