[HackerRank] Taum and B'day

아르당·2023년 11월 25일
0

HackerRank

목록 보기
33/109
post-thumbnail

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

문제

Taum은 Diksha의 생일을 축하하기 위해 계획하고 있다. Diksha가 Taum에게 원하는 선물은 두 가지이다. 하나는 블랙이고 다른 하나는 화이트이다. Taum은 Diksha를 행복하게 하기 위해 블랙 선물 b개와 화이트 선물 w개를 사야한다.

  • 블랙 선물의 가격은 bc이다.
  • 화이트 선물의 가격은 wc이다.
  • 블랙 선물을 화이트 선물을 바꾸거나 그 반대로 바꾸는 비용은 z이다.

Example

b = 3
w = 5
bc = 3
wc = 4
z = 1

블랙 선물을 3에 사서 화이트 선물로 1에 바꿀 수 있고, 화이트 선물의 가격은 4가 된다. 화이트 선물의 가격과 일치해서 블랙 선물을 사서 화이트 선물로 바꾸거나 단순히 블랙 선물과 화이트 선물을 구매할 수 있다. 전체 비용은 3 x 3 + 5 x 4 = 29가 된다.

Function Description

taumBday 함수를 완성해라. 원하는 선물을 사기 위한 최소 비용을 반환해라.
taumBday 함수는 아래와 같은 매개변수를 가지고 있다.

  • int b: 블랙 선물의 수
  • int w: 화이트 선물의 수
  • int bc: 블랙 선물의 비용
  • int wc: 화이트 선물의 비용
  • int z: 한 색상의 선물을 다른 색상으로 바꾸기 위한 비용

Return

  • int: 선물을 사기 위한 최고 비용

Constraints

  • 1 <= t <= 10
  • 0 <= b, w, bc, wc, z <= 10^9

풀이

선물의 최소 비용을 알아야 하기 때문에 각 색상의 반대 금액에 z를 더해서 비교하고 실제 구매비용을 구해야한다.
먼저 변수 rbc와 rwc를 선언하고 각각 bc와 wc를 할당한다.

// return type이 long이고,
// 비용이 int 범위를 벗어날 수 있고,
// 나중에 계산에 사용해야해서 미리 cast를 해준다.
long rbc = bc;
long rwc = wc;

그냥 샀을 때와 사고 교환했을 때 비용을 비교해서 최소 비용을 구한다.

if(bc > wc + z){
	rbc = wc + z;
}

if(wc > bc + z){
	rwc = bc + z;
}

각 선물의 개수와 최소 비용을 곱한 것을 더해서 반환한다.

return (long) b * rbc + (long) w * rwc;

전체 코드

public static long taumBday(int b, int w, int bc, int wc, int z) {
	long rbc = bc;
	long rwc = wc;

	if(bc > wc + z){
		rbc = wc + z;
	}

	if(wc > bc + z){
		rwc = bc + z;
	}

	return (long) b * rbc + (long) w * rwc;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글