<문제 제시>
<문제설명>
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다.
쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다.
시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때
받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
<예시 입출력>
<문제 해결 과정>
피자 문제와 유사한 문제이다. 서비스라는 개념이 있어서 특정 조건마다 증가값이 달라져야한다.
Try 1)
final int SERVICE = 10;
final int GET_COUPON = 1;
int chicken = 1081;
int service_chicken = 0;
int coupon = 0;
int answer = 0;
coupon = chicken / GET_COUPON; // 쿠폰 1081장
System.out.println("치킨을 " + chicken + "마리 시켜먹으면, 쿠폰이 " + coupon
+ "장 지급됩니다.");
service_chicken = coupon / SERVICE; // 쿠폰 1081장이면 108마리 추가
coupon = coupon % SERVICE; // 남은 쿠폰 수
answer = service_chicken;
System.out.println("서비스로 제공되는 치킨은 " + service_chicken + "마리 입니다.");
System.out.println("쿠폰 사용 후 남은 쿠폰 수는 " + coupon + "장 입니다.\n");
// 서비스 치킨에서도 쿠폰발급을 받습니다.
coupon += service_chicken / SERVICE; // 108 / 10 = 10
System.out.println("기존 쿠폰 + 서비스 치킨 쿠폰 = " + coupon);
service_chicken = coupon / SERVICE; // 쿠폰 10장으로 1마리 추가
coupon = coupon % SERVICE; // 남은 쿠폰 수
System.out.println("\n서비스로 제공되는 치킨은 " + service_chicken + "마리 입니다.");
System.out.println("쿠폰 사용 후 남은 쿠폰 수는 " + coupon + "장 입니다.\n");
하다보니 효율적이지 않고 반복문을 사용하지 않고 출력하려다보니 print문이 불필요하게 많아지는 것을 느꼈다.
Solution 1)
int answer = 0;
final int SERVICE = 10;
// 치킨이 서비스(10)보다 큰 동안 반복
while(chicken >= SERVICE) {
int before_c = chicken / SERVICE;
int coupon = chicken % SERVICE;
System.out.println("치킨 " + chicken + "마리에서 얻을 수 있는 서비스 치킨 = " + before_c);
System.out.println("남은 쿠폰이자 치킨 = " + coupon);
chicken = before_c + coupon;
System.out.println("최종 치킨 = " + chicken);
answer += before_c;
System.out.println("받을 수 있는 서비스 치킨의 수 = " + answer);
System.out.println("다음 반복으로 넘어갑니다. \n");
}
return answer;
반복문을 간소화시키고, print문으로 중간 과정을 확인할 수 있었다.
치킨이 10마리 이상이면 서비스가 발생하므로 SERVICE값을 변하지 않는 값인 10으로 설정하고
while(chicken >= SERVICE) 로 반복문 처리해주었다.
coupon은 치킨에서 서비스를 나눈 "나머지"가 쿠폰의 수가 되고,
before_c 는 치킨의 마리 수를 10마리로 나눠가며 업데이트해간다.
<전체코드>
public class chicken_coupon {
public static int solution(int chicken) {
int answer = 0;
final int SERVICE = 10;
// 치킨이 서비스(10)보다 큰 동안 반복
while(chicken >= SERVICE) {
int before_c = chicken / SERVICE;
int coupon = chicken % SERVICE;
chicken = before_c + coupon;
answer += before_c;
}
return answer;
}
public static void main(String[] args) {
int chicken = 1081;
System.out.println(solution(chicken));
}
}
아직 숙달되지 않은 문제유형이어서 좀 더 효율적으로 풀 수 있는 방법을 찾아봐야겠다고 생각했다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120884
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '직사각형 넓이 구하기' - Java (0) | 2023.05.14 |
---|---|
[프로그래머스] '제곱수 판별하기' - Java (1) | 2023.05.14 |
[프로그래머스] '문자열 계산하기' - Java (0) | 2023.05.13 |
[프로그래머스] '한 번만 등장한 문자' - Java (0) | 2023.05.12 |
[프로그래머스] '캐릭터의 좌표' - Java (0) | 2023.05.12 |