[HackerRank] Fair Rations

아르당·2023년 12월 7일
0

HackerRank

목록 보기
42/109
post-thumbnail

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

문제

당신은 RnakHacker의 자비로운 관리자이며, 오늘 빵을 분배하려고 한다. 군중들은 한 줄로 서 있고, 일부는 이미 빵을 가지고 있다. 어려운 시기이고 성의 식량은 줄어들고 있어서 다음 규칙에 따라 가능한 한 적은 양의 빵을 배포해야 한다.

  1. 빵을 어떤 시민 i에게 주는 경우, 시민 i의 바로 앞이나 뒤에 있는 사람(i + 1 또는 i - 1)에게 빵을 줘야한다.
  2. 모든 빵이 분배 됐을 때, 각 시민들은 짝수 개의 빵을 가져야 한다.

각 시민들이 가진 빵의 개수가 주어졌을 때, 위 두 규칙을 만족시키기 위해 분배해야 하는 최소 빵의 개수를 찾고 출력해라. 만약 불가능하다면 'NO'를 출력해라.

Example

B = [4, 5, 6, 7]

  • 처음 빵을 i = 3과 i = 4에게 주면 B = [4, 5, 6, 8]이 된다.
  • 다음 i = 2와 i = 3에 빵을 주면 B = [4, 6, 8, 8]로 조건을 충족한다.

모든 빵의 개수가 짝수이다. 그래서 4개의 빵을 분배하면 된다.

Function Description

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

  • int B[N]: 각 사람이 시작할 때 가지고 있는 빵의 수

Return

  • String: 문자열로 변환된 필요한 빵의 최소 개수 또는 'NO'

Constraints

  • 2 <= N <= 1000
  • 1 <= B[i] <= 10
  • 1 <= i <= N

풀이

반복문을 사용하면 쉽게 해결할 수 있다. 요소 하나씩 짝수로 만들면서 반복문의 진행 방향으로 다음 요소를 증가시키면 된다.

분배한 빵의 개수를 담아둘 count 변수를 선언하고 0을 할당한다.

int count = 0;

바로 for문을 수행한다.

for(int i = 0; i < B.size() - 1; i++){

}

그리고 for문 안에서 조건문을 통해 홀수면 빵을 지급하고 다음 사람에게 빵을 준다. count에 2를 증가시킨다.

if(B.get(i) % 2 != 0){
	B.set(i + 1, B.get(i + 1) + 1);
	count += 2;
}

해당 인덱스의 값은 증가시키지 않았는데 그 이유는 해당 인덱스를 통해 값을 확인만 하고 다음 인덱스의 값을 증가시키고, 다시 그 인덱스로 돌아오지 않기 때문이다.

이제 마지막 인덱스의 값이 홀수인지 확인하고 홀수라면 'NO'를 반환한다. 그렇지 않으면 count를 string으로 변환하고 반환한다.

if(B.get(B.size() - 1) % 2 != 0){
	return "NO";
}

return String.valueOf(count);

전체 코드

public static String fairRations(List<Integer> B) {
	int count = 0;

	for(int i = 0; i < B.size() - 1; i++){
		if(B.get(i) % 2 != 0){
			B.set(i + 1, B.get(i + 1) + 1);
			count += 2;
		}
	}

	if(B.get(B.size() - 1) % 2 != 0){
		return "NO";
	}

	return String.valueOf(count);
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글