본문 바로가기
알고리즘/문제풀이

저울(프로그래머스, LV 3, Java)

by 모스키토끼 2020. 3. 8.

1. 저울

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42886

 

코딩테스트 연습 - 저울 | 프로그래머스

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 합니다. 이 저울의 양팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같습니다. 또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있습니다. 저울추가 담긴 배열 weight가 매개변수로 주어질 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 return 하도록 solution 함수를 작성해주세요. 예를 들어, 무게가 각

programmers.co.kr

알고리즘 설명:

오름차순으로 정렬 후 인덱스를 차례대로 읽으면서 다음 인덱스 값이 현재까지 인덱스들의 값의 합보다 크다면 현재 인덱스 값의 +1이 조합할 수 없는 가장 작은 값이다.

  • 오름차순으로 정렬
  • 생각해야될 조건이 크게 3개로 나뉜다.
    1. 처음 들어오는 숫자가 1이 아닌 경우 -> 1이 정답
    2. 2번째 들어오는 숫자가 1or 2가 아닌 경우 -> 2가 정답
    3. 나머지에 경우 합계가 다음 인덱스보다 작은 경우 현재 인덱스 값에 +1을 해준 값이 정답

막혔던 지점:

  • 두 번째 인덱스에 1이나 2가 아닌 경우를 빼먹었더니 테스트케이스 2개가 틀렸다.

코드(Java)

package coding;

import java.util.Arrays;

public class Scale {
	public int solution(int[] weight) {
		Arrays.sort(weight);
		int sum = 0;
		int answer = 0;
		int i = 0;
		if (weight[0] != 1)
			return 1;
		if (weight[1] != 1) {
			sum = 3;
			i = 2;
		}
		for (; i < weight.length - 1; i++) {
			sum += weight[i];
			if (sum < weight[i + 1]) {
				answer = sum + 1;
				break;
			} else if (i == weight.length - 2) {
				answer = sum + weight[i + 1] + 1;
			}
		}

		return answer;
	}

	public static void main(String[] args) {

	}

}

댓글