Polpid's World

[Programing Challenges]반전한 수 더하기 본문

Development/Algorithm

[Programing Challenges]반전한 수 더하기

폴피드 2013. 2. 12. 12:30

맬리드네시아(Malidnesia)의 고대 희극인들은 비극보다 희극을 선호한다. 불행히도 고대 연극의 대부분은 비극이다. 따라서, ACM의 드라마 작가는 몇 편의 비극을 희극으로 바꾸기로 결정한다. 극의 모든 것을 반대로 바꿔야 함에도 불구하고 극의 기본 의미를 보존해야 하기 때문에 이 작업이 매우 어렵다는 것은 분명하다. 숫자를 예로 들어보자. 비극에서 어떤 숫자가 나타나면 희극에서 사용하기 전에 이 숫자를 거꾸로 변환해야 한다. 
거꾸로 쓴 숫자(Reversed number)라는 것은 비트 순서를 반대로 하는 것이 아니라 아라비아 숫자를 반대로 쓰는 것을 의미한다. 첫번째 자리가 마지막이 되고, 마지막이 첫번째가 되는 것이다. 예를 들어, 주인공이 비극에서 1245 딸기(1245 strawberries)이면, 희극에서는 5421 딸기가 된다. 자리채움 0은 생략된다. 즉, 0으로 끝나는 숫자를 반전하게 되면 0은 사라진다.(예를 들어, 1200을 바꾸면 21이 된다). 또한, 반전된 숫자는 0으로 끝나는 경우가 없다. 
ACM은 반전한 숫자를 계산해야 한다. 여러분의 작업은 반전한 두 수를 더한 합계를 구하고, 이 합계를 다시 반전하여 출력하는 것이다. 물론, 어떤 숫자들은 순서를 바꿔쓰면 같은 수가 되기 때문에 결과가 항상 유일한(unique) 것은 아니다.(예를 들어, 12, 120, 1200은 바꿔 쓰면 모두 21이 된다) 따라서, 반전했을 경우 0이 사라지는 경우는 없다고 가정해야 한다. (즉, 반전된 수가 21이면 원래 숫자는 12라고 가정하는 것이다)

 

입력

입력은 경우의 수 N이다. 입력의 첫번째 라인은 양의 정수 N만 입력한다. 그 다음에 각 케이스를 입력한다. 각 줄에는 두 개의 정수를 공백으로 구분해서 입력한다. 이 숫자들의 순서를 바꿔서 덧셈을 해야 한다. 숫자는 최대 200자까지 될 수 있다.

출력

각 케이스에 대해서 한 줄에 하나의 정수를 출력한다. 이 정수는 반전한 두 수의 합이다. 출력에서 자리 채움 0은 모두 생략한다

입력예제

3
24 1
4358 754
305 794

출력예제

34
1998
1

  1. import java.io.*;
  2. import java.util.StringTokenizer;
  3. public class AddingReversedNumberMain {
  4.  public static void main(String[] args) throws IOException{
  5.   BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  6.   String[][] temp = null;
  7.   int caseNum = 0;
  8.   StringTokenizer st = null;
  9.   int[] sum = null;
  10.   AddingReversedNumber arn = new AddingReversedNumber();
  11.   System.out.print("inout case : " );
  12.   caseNum = System.in.read() - 48;
  13.   System.in.read();
  14.   System.in.read();
  15.  
  16.   temp = new String[caseNum][2];
  17.   sum = new int[caseNum];
  18.  
  19.   for (int i = 0; i < caseNum; i++){
  20.    System.out.print(i + ". caseSet : ");
  21.    String str = in.readLine();
  22.    
  23.    st = new StringTokenizer(str, " " );
  24.    for (int j = 0; j < 2; j++){
  25.     temp[i][j] = st.nextToken();
  26.     sum[i] = sum[i] + arn.reverseNumber(temp[i][j]);
  27.    }
  28.   }
  29.  
  30.   for (int i = 0; i < sum.length; i++){
  31.    System.out.println(arn.reverseNumber(Integer.toString(sum[i])));
  32.   }
  33.  }
  34.  
  35. }
  36. public class AddingReversedNumber {
  37.  public int reverseNumber(String num){
  38.   StringBuffer sb = new StringBuffer();
  39.   String temp = null;
  40.   int len = num.length()-1;
  41.   int number;
  42.  
  43.   for (int i = len; i >= 0 ; i--){
  44.    sb.append(num.charAt(i));
  45.   }
  46.  
  47.   temp = new String(sb);
  48.   number = Integer.parseInt(temp);
  49.   return number;
  50.  }
  51. }

'Development > Algorithm' 카테고리의 다른 글

에라토스테네스의 체  (0) 2016.12.07
[Try-catch]대문자 출력  (0) 2013.11.04
[Programing Challenges]반전한 수 더하기  (0) 2013.02.12
[Hacker Cup]Find the Min  (0) 2013.02.01
[Hacker Cup]Balanced Smileys  (0) 2013.01.31
[Programming Challenges] The 3n+1 Problem  (0) 2011.09.01
0 Comments
댓글쓰기 폼