728x90
반응형
2024.09.23기준 - 브론즈1
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 아리가 주어진 동전을 1개씩만 들고 있을 때, 샌드위치를 사먹기 위해 쿠기에게 돈을 빌려서 사먹을 수 있는지 확인하는 문제입니다.
접근 방법
- 1023원 이하라면 동전을 조합해서 1023원 밑으로의 수를 다 만들 수 있기 때문에 1023원 밑으로는 "No thanks"를 입력 받습니다.
- 만약 1023원을 초과한다면 남은 돈과 쿠기의 돈을 비트연산자 &을 이용해 값을 지불할 수 있는지 확인 해줍니다.
1. 입력받은 샌드위치 값이 1023원 이하라면 "No thanks"를 출력합니다.
// 아리는 1023원을 들고 있다.
if (s < 1024) {
sb.append("No thanks");
}
2. 입력받은 샌드위치 값이 1023원을 초과한다면
- 샌드위치를 사기 위해 남은 돈과 쿠기의 돈을 비트연산자(&)을 활용해 쿠기의 돈으로 계산이 가능한지 확인해줍니다.
- 된다면 "Thanks"를 아니라면 "Impossible"을 출력해줍니다.
// 1023원이 넘을 때
else {
// 남은 돈
int rest = s - 1023;
// 남은돈에서 쿠기가 가지고 있는 돈을 비트 연산자 &를 하면 남은 돈과 같다면 낼 수 있다.
if ((rest & m) == rest) {
sb.append("Thanks");
// 쿠기의 돈을 합쳐도 낼 수 없다.
} else {
sb.append("Impossible");
}
}
그림과 같이 쿠기의 돈으로 남은 돈을 낼 수 있다면 비트연산자 &을 한다면 무조건 남은 돈과 값이 같아야 되기 때문에 식이 성립할 수 있습니다.
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken()); // 샌드위치 가격
int m = Integer.parseInt(st.nextToken()); // 쿠기가 가지고 있는 금액
// 아리는 1023원을 들고 있다.
if (s < 1024) {
sb.append("No thanks");
// 1023원이 넘을 때
} else {
// 남은 돈
int rest = s - 1023;
// 남은돈에서 쿠기가 가지고 있는 돈을 비트 연산자 &를 하면 남은 돈과 같다면 낼 수 있다.
if ((rest & m) == rest) {
sb.append("Thanks");
// 쿠기의 돈을 합쳐도 낼 수 없다.
} else {
sb.append("Impossible");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 15727번 조별과제를 하려는데 조장이 사라졌다 (0) | 2024.09.25 |
---|---|
BEAKJOON / 백준 - JAVA 4848번 집합 숫자 표기법 (0) | 2024.09.24 |
BEAKJOON / 백준 - JAVA 18795번 이동하기 3 (0) | 2024.09.22 |
BEAKJOON / 백준 - JAVA 13423번 Three Dots (1) | 2024.09.21 |
BEAKJOON / 백준 - JAVA 10914번 Veni, vidi, vici (0) | 2024.09.20 |