
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
당신은 RnakHacker의 자비로운 관리자이며, 오늘 빵을 분배하려고 한다. 군중들은 한 줄로 서 있고, 일부는 이미 빵을 가지고 있다. 어려운 시기이고 성의 식량은 줄어들고 있어서 다음 규칙에 따라 가능한 한 적은 양의 빵을 배포해야 한다.
각 시민들이 가진 빵의 개수가 주어졌을 때, 위 두 규칙을 만족시키기 위해 분배해야 하는 최소 빵의 개수를 찾고 출력해라. 만약 불가능하다면 'NO'를 출력해라.
B = [4, 5, 6, 7]
모든 빵의 개수가 짝수이다. 그래서 4개의 빵을 분배하면 된다.
fairRations 함수를 완성해라.
fairRations 함수는 아래와 같은 매개변수를 가지고 있다.
반복문을 사용하면 쉽게 해결할 수 있다. 요소 하나씩 짝수로 만들면서 반복문의 진행 방향으로 다음 요소를 증가시키면 된다.
분배한 빵의 개수를 담아둘 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);
}