```
백준 25166번 배고픈 아리의 샌드위치 구매하기 JAVA 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 25166번 풀이
https://www.acmicpc.net/problem/25166
25166번: 배고픈 아리의 샌드위치 구매하기
"두리"라는 나라가 있다. 이 나라에서 사용되는 동전은 1원, 2원, 4원, 8원, 16원, 32원, 64원, 128원, 256원, 512원짜리 이렇게 총 10가지이다. 이 나라의 국민인 아리는 10가지의 동전을 각각 1개씩 총 10
www.acmicpc.net
백준 25166번 배고픈 아리의 샌드위치 구매하기는
난이도 브론즈 등급의 문제로서
1, 2, 4, 8, 16, 32, 64, 128, 256, 512원의 동전이 통용되는 국가에
해당되는 동전을 가진 아리라는 사람이 있고
샌드위치 가격 S 가 주어질 때 샌드위치 집에 잔돈이 없는 경우
일부 동전을 한개씩 가진 쿠키라는 사람한테 돈을
빌리지 않고 지불가능하면 "No thanks"
빌리고 지불가능하면 "Thanks"
아니면 "Impossible"을 출력하면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
1, 2, 4, 8, 16, 32, 64, 128, 256, 512으로 1023까지는 조합해서 만들 수 있기 때문에
1023 이하이면 아리가 혼자 지불 가능하고
1023 초과인 경우 초과분을 쿠키가 가진돈과 AND 연산해서 결과가 1이거나 2로 나눠지는 경우 즉
1이 포함된 경우에는 같이 지불불가, 아닌 경우에는 같이 지불 가능으로 판단했습니다.
클린 코드를 생각하면서
Readability에 초점을 맞춰서 작성해보았습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
final String input = br.readLine();
System.out.print(solve(input));
}
private static String solve(String input) {
StringTokenizer st = new StringTokenizer(input);
final int sandwichPrice = Integer.parseInt(st.nextToken());
final int cookieBudget = Integer.parseInt(st.nextToken());
final int arieBudget = 1023;
// 아리 혼자서 살수 있는 경우
String outputStr = "No thanks";
// 아리 혼자서 살수 없는 경우
if (!isPayableAlone(arieBudget, sandwichPrice)) {
outputStr = "Thanks";
// 쿠키가 도와줘도 못사는 경우
if (!isPayableTogether(arieBudget, sandwichPrice, cookieBudget)) {
outputStr = "Impossible";
}
}
return outputStr;
}
private static boolean isPayableTogether(int arieBudget, int sandwichPrice, int cookieBudget) {
boolean isPayable = true;
final int overPrice = sandwichPrice - arieBudget;
if (overPrice != cookieBudget) {
int k = overPrice & cookieBudget;
if (k == 1 || k % 2 == 0) {
isPayable = false;
}
}
return isPayable;
}
private static boolean isPayableAlone(int arieBudget, int sandwichPrice) {
return arieBudget >= sandwichPrice;
}
}
//codemasterkimc.tistory.com [김씨의 코딩 스토리]
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
'Java > Java 알고리즘' 카테고리의 다른 글
| 백준 25165번 영리한 아리의 포탈 타기 JAVA 구현해보기 (0) | 2022.05.28 |
|---|---|
| 백준 25191번 치킨댄스를 추는 곰곰이를 본 임스 JAVA 구현해보기 (0) | 2022.05.25 |
| 백준 25177번 서강의 역사를 찾아서 JAVA 구현해보기 (0) | 2022.05.22 |
| 백준 15990번 1, 2, 3 더하기 5 JAVA 구현해보기 (0) | 2022.05.18 |
| 백준 14487번 욱제는 효도쟁이야!!JAVA 구현해보기 (0) | 2022.05.17 |