문제 :
시즌 한정 쿠폰(s_copns)과 일반 쿠폰(n_copns)으로 사은품을 교환할 수 있다.
총 12장의 쿠폰으로 교환할 수 있으며, 반드시 시즌 한정 쿠폰은 5장 이상이어야 한다.
알고리즘:
1. s_copns과 n_copns을 사은품을 교환할 수 있는 최소값인 5와 7로 나눈 값을 비교.
2. s_copn <= n_copn 인 경우 s_copn을 출력
3. s_copn > n_copn 인 경우 n_copns을 모두 사용한 값을 출력
주의점 :
- s_copns과 n_copns은 64비트 부호정수형 범위
PHP_INT_MAX = 9223372036854775807
- while문을 사용하였더니 timeout이 되었음
- 7~10번은 테스트케이스를 통과하지 못하였다...ㅜ
<?php
$n = fgets(STDIN); //입력 받을 테스트케이스 갯수
if (intval($n) < 1 || intval($n) > 10000) { // 1이상 10,000이하
return false;
}
$m = array(); //입력 받을 쿠폰 갯수를 배열로 받음
for ($i = 0; $i < intval($n); $i++) {
$m[] = fgets(STDIN); //ex) 10 12
}
foreach ($m as $val) {
$copn = explode(' ', trim($val)); //공백으로 구분
$s_copns = intval($copn[0]); //시즌 쿠폰 갯수
$n_copns = intval($copn[1]); //일반 쿠폰 갯수
if ($s_copns < 5) { //시즌 쿠폰이 5개 이하면 사은품을 교환할 수 없다.
printf("0\n");
continue;
}
$t = 0;
$s_copn = floor($s_copns / 5); //시즌 쿠폰을 5개씩 사용했을때 최대값
$n_copn = floor($n_copns / 7); //일반 쿠폰을 7개씩 사용했을때 최대값
if ($s_copn <= $n_copn) {
printf("%d\n",$s_copn); //시즌 쿠폰이 일반 쿠폰보다 적을 경우 최대값 출력
} else { //시즌 쿠폰이 일반 쿠폰보다 많을 경우
$s_copns -= $n_copn * 5; //일반 쿠폰 최대값으로 시즌 쿠폰을 사용
$na = $n_copns % 7; //일반 쿠폰을 모두 사용하기 위해 나머지를 구함
if ($na > 0) {
$n_copn++;
$t = 12 - $na; //일반 쿠폰 + 시즌 쿠폰 = 12
}
printf("%d\n",(floor(($s_copns-$t)/12))+$n_copn);
}
}
?>
'IT지식 > 개발' 카테고리의 다른 글
녹스로 hosts 설정하기 (0) | 2021.12.07 |
---|---|
SameSite Cookie란? 변경된 크롬 80 쿠키 정책 (2) | 2020.09.03 |
[구름레벨] 문제선정하기 PHP (0) | 2020.08.17 |
[구름레벨] 근묵자흑 PHP (0) | 2020.08.17 |
[Ubuntu] Apache2 웹서버 Document root 디렉토리 변경하기 (1) | 2020.07.11 |