[HackerRank] Electronics Shop

아르당·2023년 11월 1일
0

HackerRank

목록 보기
6/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

어떤 사람이 주어진 예산으로 가장 비싸게 키보드와 USB를 사길 원한다. 키보드와 USB, 예산이 주어졌을 때, 구입할 수 있는 비용을 구해라. 만약 둘 다 못 살 경우, -1을 반환해라.

Example

b = 60;
keyboards = [40, 50, 60]
drives = [5, 8, 12]

그 사람은 40 Keyboard + 12 USB = 52 또는 50 Keyboard + 8 USB를 살 수 있다. 더 비싼 옵션을 선택하고 58을 반환한다.

Function Description

getMoneySpent 함수를 완성해라.
getMoneySpent 함수는 아래와 같은 매개변수를 가지고 있다.

  • int keyboards[n]: 키보드의 가격
  • int drives[m]: USB의 가격
  • int b: 예산

Returns

  • int: 최대로 사용할 수 있는 금액, 또는 모두 구매할 수 없는 경우 -1

Constraints

  • 1 <= n, m <= 1000
  • 1 <= b <= 10^6
  • 각 항목의 가격의 범위는 [1, 10^6]

풀이

반복문을 사용하여 해결했다. 먼저 keyboards와 drives를 정렬한다.

Arrays.sort(keyboards);
Arrays.sort(drives);

result를 Integer로 선언한다. 가장 비싼 가격끼리 합해도 Integer 범위이다. 그리고 result에 각 index 0을 합해서 할당한다.

int result = keyboards[0] + drives[0];

result가 b보다 크면 -1을 반환한다. 이미 keyboards와 drives를 정렬해두었기 때문에 가장 작은 keyboard와 drives의 합이어서 가능하다.

if(result > b) return -1;

그리고 반복문을 사용해 sum을 구한 뒤 result보다 큰지, b보다 작거나 같은지를 비교해주고 맞다면 sum을 result에 할당한다.

for(int i = 0; i < keyboards.length; i++){
	for(int j = 0; j < drives.length; j++){
		int sum = keyboards[i] + drives[j];

		if(sum > result && sum <= b){
			result = sum;
		}
	}
}

마지막으로 result를 반환한다.

return result;

전체 코드

static int getMoneySpent(int[] keyboards, int[] drives, int b) {
	Arrays.sort(keyboards);
	Arrays.sort(drives);

	int result = keyboards[0] + drives[0];

	if(result > b){
		return -1;
	}

	for(int i = 0; i < keyboards.length; i++){
		for(int j = 0; j < drives.length; j++){
			int sum = keyboards[i] + drives[j];

			if(sum > result && sum <= b){
				result = sum;
			}
		}
	}

	return result;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글