아리가 가진 1023원은 2진수로 나타내면 1111111111
입니다.
__________
을 0
과1
로 채울 수 있습니다. 즉 모든 화폐를 한번 또는 0번 써서 1023이하의 숫자를 만다는 의미입니다.숫자&숫자
의 연산은 두 숫자를 2진수로 변환했을 때 각 자릿수가 모두 1이면
1으로, 그렇지 않으면 0으로 채워진 2진수가 반환됩니다.
100&110
은 100
이 됩니다. 이때 실제로 적용할 때에는 String의 2진수가 아니라 원래의 int값으로 계산해야 합니다.4&5
를 했을 때 그 결과값은 4
를 반환합니다.2&7
은 각각 2진수일 때 10
과 110
입니다. 이때 자릿수가 짧은 10
은 10_
가 아닌 _10
으로 110
과 비교되고 그 결과 010
인 2
가 반환됩니다.(a&b) == a
의 의미는 a가 1인 곳에서는 b가 모두 1이였다는 의미
입니다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
if(a<1024) {
System.out.println("No thanks");
}else {
int needMoney = a-1023;
int borrowMoney = b;
if((needMoney&borrowMoney) == needMoney) {
System.out.println("Thanks");
}else{
System.out.println("Impossible");
}
}
}
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String money = Integer.toBinaryString(1023);
String price = Integer.toBinaryString(a);
if(a<1024) {
System.out.println("No thanks");
}else {
String needMoney = Integer.toBinaryString(a-1023);
String borrowMoney = Integer.toBinaryString(b);
if(func(needMoney,borrowMoney)) {
System.out.println("Thanks");
}else{
System.out.println("Impossible");
};
}
}
public static boolean func(String needMoney, String borrowMoney) {
StringBuilder sb = new StringBuilder();
String a;
String b;
if(needMoney.length()<borrowMoney.length()) {
for (int i = 0; i < borrowMoney.length() - needMoney.length(); i++) {
sb.append("0");
}
sb.append(needMoney);
a = sb.toString();
b = borrowMoney;
}else if(needMoney.length()>borrowMoney.length()) {
for (int i = 0; i < needMoney.length() - borrowMoney.length(); i++) {
sb.append("0");
}
sb.append(borrowMoney);
a = sb.toString();
b = needMoney;
}else {
a = needMoney;
b = borrowMoney;
}
for (int i = 0; i < a.length(); i++) {
if(a.charAt(i) != b.charAt(i)) return false;
}
return true;
}
}