More actions
imported>talin0528 No edit summary |
imported>talin0528 No edit summary |
||
| Line 75: | Line 75: | ||
** printJ 함수 내에서 while(num<bin.length-1)문의 1을 빼주지 않아 bin[[num+1]]가 index bound of exception이 났었습니다. | ** printJ 함수 내에서 while(num<bin.length-1)문의 1을 빼주지 않아 bin[[num+1]]가 index bound of exception이 났었습니다. | ||
* Wrong answer | * 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는 죄가 없어! 내가 바보임 ㅠㅠ | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Line 98: | Line 99: | ||
| 524295 | | 524295 | ||
|} | |} | ||
---- | ---- | ||
[[ACM_ICPC/2011년스터디]] | [[ACM_ICPC/2011년스터디]] | ||
Revision as of 08:49, 25 June 2011
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
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 같으니:)
- Runtime error
- printJ 함수 내에서 while(num<bin.length-1)문의 1을 빼주지 않아 binnum+1가 index bound of exception이 났었습니다.
- Wrong answer
- 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 |