Status ¶
| Problem | 2453 | User | talin0528 |
| Memory | 3656K | Time | 375MS |
| Language | Java | Result | Accepted |
Idea ¶
bit ì—°ì‚°ì�´ ì�µìˆ™ì¹˜ê°€ 않아, 10진수 -> 2진수 변환해서 ë°°ì—´ì—� ë„£ì—ˆìŠµë‹ˆë‹¤ã… ã… (ë��ë‚´ê³ ë‹¤ì‹œ 반대로..;ã…�;..ì�´ëŸ° 비효율ì �ì�¸!)
1ì�´ëž€ 숫ìž�를 찾았ì�„ 때 ê·¸ 앞ì�˜ 숫ìž�ê°€ 0ì�´ë©´ 1ì�„ 앞으로 ë³´ë‚´ê³ , 1ì�´ë©´ 맨 ë��쪽으로 보내는...
ex)
0010 0000 -> 0100 0000
0011 1100 -> 0100 0111
1ì�´ëž€ 숫ìž�를 찾았ì�„ 때 ê·¸ 앞ì�˜ 숫ìž�ê°€ 0ì�´ë©´ 1ì�„ 앞으로 ë³´ë‚´ê³ , 1ì�´ë©´ 맨 ë��쪽으로 보내는...
ex)
0010 0000 -> 0100 0000
0011 1100 -> 0100 0111
Source Code ¶
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int i = sc.nextInt();
if(i == 0)
break;
printJ(i);
}
}
private static void printJ(int i){
int [] bin = binI(i);
int num = 0, count=0;
while(num<bin.length-1){
if(bin[num] == 1){
if(bin[num+1] == 0){
bin[num+1] = 1;
bin[num] = 0;
break;
}else{
bin[num] = 0;
bin[count++] = 1;
}
}
num++;
}
int result = 0;
for(int k=0; k<bin.length;k++){
result += bin[k]*Math.pow(2,k);
}
System.out.println(result);
}
private static int [] binI(int i){
int [] temp = new int [21];
int num = 0;
while(i>0){
temp[num++] = i%2;
i = i/2;
}
return temp;
}
}
Trial and error ¶
- Compile error
- í�´ëž˜ìФ ì�´ë¦„ì�€ í•ìƒ� "Main"으로 해주어야 합니다. 깜ì°�한 poj 같으니:)
- í�´ëž˜ìФ ì�´ë¦„ì�€ í•ìƒ� "Main"으로 해주어야 합니다. 깜ì°�한 poj 같으니:)
- Runtime error
- printJ 함수 내�서 while(num
num+1가 index bound of exception� 났었습니다.
- printJ 함수 내�서 while(num
- Wrong answer
- 2^20 = 1048576 으로 1000000보다 í�¬ë‹ˆê¹Œ ë°°ì—´ì�˜ í�¬ê¸°ë¥¼ 20으로 잡았었는ë�°, 1ê³¼ 0ì�„ 옮기면서 ì�´ 숫ìž�보다 ë�” 커지는 경우를 ê³ ë ¤í•˜ì§€ 못했습니다. ê·¸ ê²°ê³¼ 1~1000000 중ì—�서 4ê°œì�˜ 숫ìž�ê°€ 맨 앞ì�˜ 1ì�´ ì§¤ë ¤ì„œ 숫ìž�ê°€ 작게 ì¶œë ¥ë�œ! ;ã……; 언뜻 보길래 ë§žì�€ 줄 알아서 뻘짓ì�„ ë§Žì�´ 한 ã…‹ã…‹ poj는 죄가 없어! ë‚´ê°€ 바보임 ã… ã…
- 2^20 = 1048576 으로 1000000보다 í�¬ë‹ˆê¹Œ ë°°ì—´ì�˜ í�¬ê¸°ë¥¼ 20으로 잡았었는ë�°, 1ê³¼ 0ì�„ 옮기면서 ì�´ 숫ìž�보다 ë�” 커지는 경우를 ê³ ë ¤í•˜ì§€ 못했습니다. ê·¸ ê²°ê³¼ 1~1000000 중ì—�서 4ê°œì�˜ 숫ìž�ê°€ 맨 앞ì�˜ 1ì�´ ì§¤ë ¤ì„œ 숫ìž�ê°€ 작게 ì¶œë ¥ë�œ! ;ã……; 언뜻 보길래 ë§žì�€ 줄 알아서 뻘짓ì�„ ë§Žì�´ 한 ã…‹ã…‹ poj는 죄가 없어! ë‚´ê°€ 바보임 ã… ã…
| ìž�연수 I | 기대한 ê°’ | ì‹¤ì œ ê°’ |
| 524288 | 1048576 | 524288 |
| 786432 | 1048577 | 524289 |
| 917504 | 1048579 | 524291 |
| 983040 | 1048583 | 524295 |
- ì œê°€ 처ì�Œì—� 하다하다 안ë�˜ì„œ 10진수를 2진수로 í‘œê¸°í•˜ë ¤ê³ í–ˆë‹¤ê°€ 그게 매우 ì–´ë µë‹¤ëŠ”ê±¸ ê¹¨ë‹¬ì•˜ì£ ...; 배열로 하는 방법ë�„ 있었군요. -김태진










