본문 바로가기
Programming/Contest

Qualification Round Africa 2010 - Problem C. T9 Spelling

by NAMP 2012. 3. 6.

   

http://code.google.com/codejam/contest/351101/dashboard#s=p2

   

A-Z 까지 대응하는 숫자를 미리 다 정의해 놓으면 쉬울 듯 하다.

하지만 이보다 효율적인 코드가 있을텐데………………………...

   

전에 Perl 카페에서, 본 원라인이 생각나서 적어봅니다.

   

Perl Code

   

$ perl -le '@a=1..3;@b=1..4;@k{a..z," "}=((@a)x5,@b,@a,@b,1);$c+=$k{$_} for split //,"welcome to ulab";print $c;'

29

   

원본 위치 <http://cafe.naver.com/ArticleRead.nhn?clubid=18062050&page=1&menuid=14&boardtype=L&articleid=222&referrerAllArticles=false>

  

chomp (my $s = <STDIN>);

   

my %key;

my @a=(' ','.qz!QZ',map{$_.uc}qw(abc def ghi jkl mno prs tuv wxy));

for my $i (0..$#a) {

my @dits = split //, "$a[$i]$i";

for (0..$#dits) {

$key{$dits[$_]} = $i x ($_+1);

}

}

   

print join('0', map { $key{$_} } split //, $s), "\n";

   

원본 위치 <http://cafe.naver.com/ArticleRead.nhn?clubid=18062050&page=2&menuid=14&boardtype=L&articleid=163&referrerAllArticles=false>

   

   

   

자바코드

T9_Spelling.java

  

  

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

   

   

public class T9_Spelling {

   

/**

* @param args

*/

public static void main(String[] args) {                

String strFileName = "QRA2010_C-large-practice";

String strInputFileName = strFileName + ".in";

String strOutputFileName = strFileName + ".out";

   

int totalNumber = 0;

int outputCaseNumber = 1;

   

try {                 

        ////////////////////////////////////////////////////////////////

        BufferedReader in = new BufferedReader(new FileReader(strInputFileName));

        BufferedWriter out = new BufferedWriter(new FileWriter(strOutputFileName));

        String s;

 

        totalNumber = Integer.parseInt(in.readLine());

          

while ((s = in.readLine()) != null) {

        System.out.println(s);

          

        char[] charArray = s.toCharArray();

          

        s = "";

          

        for (int i = 0; i < charArray.length; i++) {

String strNum = getNumber(charArray[i]);

   

if (getLastChar(s) == getFirstChar(strNum)) {

s = s + " ";

}

   

s = s + strNum;                                        

}

          

        s = String.format("Case #%d: %s\n", outputCaseNumber++, s);

        System.out.print(s);

        out.write(s);

}

in.close();

out.close();

////////////////////////////////////////////////////////////////

} catch (IOException e) {

        System.err.println("ERROR");

System.err.println(e); // 에러가 있다면 메시지 출력

System.exit(1);

}

   

}

   

private static Object getFirstChar(String strNum) {

if (strNum.length() <= 0) {

return null;

}

else {

return strNum.charAt(0);

}        

}

   

private static Object getLastChar(String s) {

   

if (s.length() <= 0) {

return null;

}

else {

return s.charAt(s.length()-1);

}        

}

   

private static String getNumber(char c) {

   

String retStr = "";

   

switch (c) {

case 'a':

retStr = "2";

break;

case 'b':

retStr = "22";

break;

case 'c':

retStr = "222";

break;

case 'd':

retStr = "3";

break;

case 'e':

retStr = "33";

break;

case 'f':

retStr = "333";

break;

case 'g':

retStr = "4";

break;

case 'h':

retStr = "44";

break;

case 'i':

retStr = "444";

break;

case 'j':

retStr = "5";

break;

case 'k':

retStr = "55";

break;

case 'l':

retStr = "555";

break;

case 'm':

retStr = "6";

break;

case 'n':

retStr = "66";

break;

case 'o':

retStr = "666";

break;

case 'p':

retStr = "7";

break;

case 'q':

retStr = "77";

break;

case 'r':

retStr = "777";

break;

case 's':

retStr = "7777";

break;

case 't':

retStr = "8";

break;

case 'u':

retStr = "88";

break;

case 'v':

retStr = "888";

break;

case 'w':

retStr = "9";

break;

case 'x':

retStr = "99";

break;

case 'y':

retStr = "999";

break;

case 'z':

retStr = "9999";

break;                                                

default:

retStr = "0";

break;

}

   

return retStr;

}

   

}

  

   

   

   

   

   

   

댓글