[ 문제 ]
커피를 좋아하는 성태는 집 주변에 있는 구름커피(Goorm Coffee)의 단골 손님이다.
출근길뿐만 아니라 식사 후 그리고 업무상 미팅도 구름커피를 애용하는 성태는 본인도 모르는 사이 수 많은 쿠폰을 적립해두고 있었다.
최근 구름커피에서는 고객이 모은 쿠폰을 상품으로 교환해주는 이벤트를 진행하고 있었고,
이를 알게 된 성태는 자신은 몇 개의 상품을 얻을 수 있을지 궁금해졌다.
하지만 너무나 많은 쿠폰을 보유하고 있는 성태는 자신이 얻을 수 있는 최대의 상품 수를 계산하기가 어려웠다.
성태의 쿠폰으로 얻을 수 있는 상품의 수를 계산해주는 프로그램을 작성해주자.
현재 성태는 N개의 시즌 한정 음료 쿠폰과 M개의 일반 음료 쿠폰을 가지고 있다.
그리고 구름커피에서는 다음과 같은 조합으로 12장의 쿠폰을 제시하면 이를 상품으로 교환해주고 있다.
- 하나의 상품으로 교환하기 위해서는 12장의 쿠폰이 필요하다.
- 이 쿠폰들 중 최소 5개는 시즌 한정 음료 쿠폰이어야 한다.
예를 들어서 시즌 한정 음료 쿠폰 6개와 일반 음료 쿠폰 6개를 제시하면 상품으로 교환할 수 있지만,
시즌 한정 음료 쿠폰 4개와 일반 음료 쿠폰 8개를 제시하면 상품으로 교환할 수 없다.
[ 입력 형식 ]
- 첫 줄에는 테스트케이스의 수를 나타내는 1이상 10,000이하의 자연수 T가 입력으로 주어진다.
- 이후 총 T개의 테스트케이스에 대한 입력이 차례로 주어진다.
- 각 테스트케이스에 대한 입력은 한 줄에 주어진다.
- 두 개의 정수 N, M이 공백으로 구분되어 차례로 주어진다.
- N은 성태가 보유한 시즌 한정 음료 쿠폰의 수를 나타낸다.
- M은 성태가 보유한 일반 음료 쿠폰의 수를 나타낸다.
- N과 M은 모두 64비트 부호형 정수형 범위 내에 존재하는 0 이상의 정수다.
[ 출력 형식 ]
- 각 테스트케이스에 대한 정답을 순서대로 한 줄씩 출력한다.
- 성태가 보유한 쿠폰으로 교환할 수 있는 최대 상품의 수를 계산하여 출력하시오.
[ 풀이 ]
N을 최소로 사용할 수 있는 경우는 N을 5장, M을 7장 사용하는 경우이기 때문에
먼저, 이런 경우로 만들 수 있는 상품 수를 cnt에 더해주었습니다.
그리고 cnt 수만큼 빼주어 N과 M의 값을 갱신해주었습니다.
N이 5장 이상 있어야 하는게 조건이므로
N이 5장 이상이고 M+N이 12장 이상있어서 상품을 받을 수 있는 경우 (①)
M을 전부 사용해주고 나머지를 N으로 사용하여 1개의 상품을 받을 수 있습니다.
제가 헷갈린게 조건으로 N이 5장 이상 있는 경우만 고려하면 된다고 생각했는데 M+N<12인 경우가 있기 때문에
꼭 조건 두 개를 써줘야 하더라구요.
예를 들어 N이 8장 있고, M이 3장 있는 경우는 N>=5는 만족하지만 M+N>=12를 만족하지 못해서 상품을 받을 수 없습니다.
이제 M은 0장이므로 N으로 12장을 전부 사용하는 경우의 수를 더해주었습니다. (②)
마지막으로, cnt의 데이터 타입도 꼭 long으로 선언해줘야 정답이 됩니다.
int로 선언해줬더니 틀리더라구요..
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int t = 0; t < T; t++) {
st = new StringTokenizer(br.readLine());
long N = Long.parseLong(st.nextToken()); // 성태가 보유한 시즌 한정 음료 쿠폰 수
long M = Long.parseLong(st.nextToken()); // 성태가 보유한 일반 음료 쿠폰 수
long cnt = 0;
cnt += Math.min(N/5, M/7);
N -= 5*cnt;
M -= 7*cnt;
if (N >= 5 && M+N >= 12) { // ①
N -= (12-M);
M = 0;
cnt++;
}
cnt += N / 12; // ②
System.out.println(cnt);
}
}
}
'Algorithm > 백준+프로그래머스+SWEA+정올+구름' 카테고리의 다른 글
[Algorithm] 백준 17266 어두운 굴다리 (0) | 2022.06.11 |
---|---|
[Algorithm] 백준 14497 주난의 난 (0) | 2022.05.25 |
[Algorithm] 백준 5052 전화번호 목록 (0) | 2022.05.06 |
[Algorithm] 프로그래머스 프린터 (0) | 2022.04.28 |
[Algorithm] 백준 17178 줄서기 (0) | 2022.04.25 |