제이슨의 개발이야기
백준2437번저울 코틀린 그리디 알고리즘 본문
https://www.acmicpc.net/problem/2437
2437번: 저울
하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓
www.acmicpc.net
요번에는 바로 저울 문제를 풀어봤습니다!
문제
하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있다.
무게가 양의 정수인 N개의 저울추가 주어질 때, 이 추들을 사용하여 측정할 수 없는 양의 정수 무게 중 최솟값을 구하는 프로그램을 작성하시오.
예를 들어, 무게가 각각 3, 1, 6, 2, 7, 30, 1인 7개의 저울추가 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21이다.
입력
첫 째 줄에는 저울추의 개수를 나타내는 양의 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 둘째 줄에는 저울추의 무게를 나타내는 N개의 양의 정수가 빈칸을 사이에 두고 주어진다. 각 추의 무게는 1이상 1,000,000 이하이다.
출력
첫째 줄에 주어진 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 출력한다.
예제 입력 1
7
3 1 6 2 7 30 1
예제 출력 1
21
저는 문제 접근 하는 방법을
1kg부터 쭉 무개를 재다가 무개가 잴 수 없는 무개 일 경우 println() 으로 출력했습니다
무개를 재는 방법은 가지고 있는 추의 무개만큼 빼 보면서 0보다 작아지는 경우 와
가지고 있는 추를 다 뺐는대 여전히 0보다 클 경우
가지고 있는 추로는 무개를 잴 수 없다는 결론 을 냈습니다!
그러나 무작정 가지고 있는 추의 무개로 뺴는 것이 아니라
먼저 추의 배열을 정렬 한 다음
배열의 끝에서부터 시작해서 (가장 무거운 추 부터 ) 비교하다가
추의 무개가 무개를 재려는 대상보다 가벼워지는 시점 부터 빼면서
0보다 작아지는지 혹은 가지고 있는 추의 무개를 다 빼보아도 여전히 0보다 큰지 판단하면 됩니다!
예를 들면
3 1 6 2 7 30 1 추 들을 먼저 정렬합니다
1,1,2,3,7,30 으로 정렬 후
예를 들면 21을 잴 수 있는 무개인지 확인하려면
30은 건너뛰고 7,3,2,1,1 순서로 빼는 과정을 거치면 됩니다!!
import java.util.*
fun main(){
var num = readLine()?.toInt()
var numArray = IntArray(num!!)
var str = readLine()
var array = str?.split(" ")
var check = false
var answer =1
for(i in 0 until num){
numArray[i] = array?.get(i)!!.toInt()
}
Arrays.sort(numArray)
while(true){
var temp = answer
for(i in numArray.size-1 downTo 0){
if(temp>=numArray[i]){
if(temp-numArray[i]<0){
check = true
break
}else if(temp-numArray[i]==0){
break
}else{
temp -= numArray[i]
}
}
if(i==0&&temp!=0){
check =true
}
}
if(check){
println(answer)
break
}else{
answer++
}
}
}
'코딩테스트' 카테고리의 다른 글
프로그래머스 방문길이 2단계 summer/winter coding 2018 (0) | 2021.09.30 |
---|---|
백준 2839번 설탕배달 코틀린 그리디 알고리즘 (0) | 2021.09.29 |
백준 스택 코틀린 (0) | 2021.09.28 |
프로그래머스 최소 직사각형 코틀린 위클리 챌린지 8주차 (0) | 2021.09.28 |
프로그래머스 구명보트 그리디알고리즘 (0) | 2021.09.28 |