'로마숫자'에 해당되는 글 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줄이 나왔습니다.(이클립스 소스포맷하면 몇줄 더 늘어나요 -.-;)
그래도 초록막대를 보면 기분이 좋아집니다. 즐거운 경험이었습니다. ^^


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

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 에코지오

댓글을 달아 주세요

  1. BlogIcon 기선 2008.05.03 09:31 신고  댓글주소  수정/삭제  댓글쓰기

    우와.. 이 코드가 거의 정답에 가까울 것 같은데요. 잘 봤습니다. :)



티스토리 툴바