'로마숫자'에 해당되는 글 1건

  1. 2008.04.30 로마숫자 변환기 2
1부터 1000까지의 임의의 아라비아 숫자를 로마식 숫자로 바꿔주는 프로그램입니다.
기선님 블로그 보고 시간나면 해봐야지 하다가 며칠전에야 결심하고 점심시간에 1시간동안
코딩을 했는데 생각보다 쉽지 않았습니다. 1시간에 끝내려다가 결국 3시간 넘게 걸렸네요. -.-

우선 규칙을 파악하고 파악된 규칙을 코드로 풀어내는게 결코 쉽지 않더군요.
게다가 토비님의 15줄 언급으로 압박이 생겨서인지 짱구가 잘 안굴려진다는... ㅠㅠ

package kr.pe.javarss;
public class RomanConverter {
 String deciRomans[] = { "I", "X", "C", "M" }; // 1,10,100,1000에 대응하는 로마숫자
 String pentaRomans[] = { "V", "L", "D", "ↁ" }; // 5,50,500,5000에 대응하는 로마숫자
 public String convert(int number) {
  String roman = "";
  for (int i = 0; i < deciRomans.length && number != 0; i++, number /= 10) {
     roman = convertDigit(number % 10, i) + roman;
  }
  return roman;
 }
 // 0~9까지 숫자를 자릿수(1의 자리=0, 10의 자리=1,...)에 따라 로마숫자로 변환
 private String convertDigit(int digit, int pos) {
   if (digit < 4) return org.apache.commons.lang.StringUtils.repeat(deciRomans[pos], digit);
   if (digit == 4) return deciRomans[pos] + pentaRomans[pos];
   if (digit < 9) return pentaRomans[pos] + convertDigit(digit - 5, pos);
   if (digit == 9) return deciRomans[pos] + deciRomans[pos + 1];
   return "";
 }
}


결과는 15줄보다 조금 많은 23줄이 나왔습니다.(이클립스 소스포맷하면 몇줄 더 늘어나요 -.-;)
그래도 초록막대를 보면 기분이 좋아집니다. 즐거운 경험이었습니다. ^^


* 느낀 점
- 테스트케이스가 로직을 만들어 주지는 않는다. 테스트는 로직에 대한 확신과 힌트를 제공할 뿐,
  로직은 개발자의 머리에서 나오는 것이다.
 
- 자바언어는 별로 재미가 없다. 머릿속의 아이디어를 표현하기 위한 융통성과 지원구문이 부족하다.

Posted by 에코지오
,