Whiteship's Note

TDD 연습하기 - RomanNumber

모하니?/Coding : 2008. 4. 18. 14:21


1부터 1000사이의 숫자를 주면 로마숫자로 변환하는 프로그램을 TDD로 개발하시오.

점심시간에 밥 빨리먹고 심심하신 분들 한 번 해보세요. 재밌네요. 캬캬..
토비형님은 자바코드 열댓줄 루비코드 대여섯줄이면 끝난다고 하네요... 워우...

자바코드로 짜실 분들을 위테 테스트코드를 올려드리겠습니다.

        assertEquals("I", maker.convert(1));
        assertEquals("II", maker.convert(2));
        assertEquals("III", maker.convert(3));
        assertEquals("IV", maker.convert(4));
        assertEquals("V", maker.convert(5));
        assertEquals("VI", maker.convert(6));
        assertEquals("VII", maker.convert(7));
        assertEquals("VIII", maker.convert(8));
        assertEquals("IX", maker.convert(9));
        assertEquals("X", maker.convert(10));
        assertEquals("XI", maker.convert(11));
        assertEquals("XII", maker.convert(12));
        assertEquals("XIII", maker.convert(13));
        assertEquals("XIV", maker.convert(14));
        assertEquals("XV", maker.convert(15));
        assertEquals("XIX", maker.convert(19));
        assertEquals("XX", maker.convert(20));
        assertEquals("XXX", maker.convert(30));
        assertEquals("XL", maker.convert(40));
        assertEquals("L", maker.convert(50));
        assertEquals("LX", maker.convert(60));
        assertEquals("LXX", maker.convert(70));
        assertEquals("LXXX", maker.convert(80));
        assertEquals("XC", maker.convert(90));
        assertEquals("C", maker.convert(100));
        assertEquals("CC", maker.convert(200));
        assertEquals("CD", maker.convert(400));
        assertEquals("D", maker.convert(500));
        assertEquals("DCLXVI", maker.convert(666));
        assertEquals("CM", maker.convert(900));
        assertEquals("M", maker.convert(1000));
        assertEquals("MCMXLV", maker.convert(1945));
        assertEquals("MCMXCIX", maker.convert(1999));
        assertEquals("MM", maker.convert(2000));
        assertEquals("MMM", maker.convert(3000));
        assertEquals("ↁ", maker.convert(5000));

간단하지요. 테스트 코드 짜는건 쉬운데.. (위키피디아에 있는 표를 전부 테스트 해봤습니다. 불필요한 것도 있겠지만.. 뭐 어때요. 캬캬캬) 전 구현해보니 60줄 정도 나왔습니다. 토비형님 코드의 4 배... 라인수는 Ctrl + Shift + F 기준입니다.

저녁값 내기로 가장 짧은 코드로 구현하기 뭐 이런거 해도 재밌겠네요. 전 .. 그러고 놀 수 사람이... 없어요. 흑흑.. 외로워... 흑흑흑... 이젠 어려운 자바습이랑 놀아야지.. @.@ 자바습아 이리온...


풀어보신 분들은 저처럼 소스 코드를 올려주세요. 부끄럽지만 제 파일도 올려둡니다. 재밌게 공유해 보아요.


top

  1. Favicon of https://ecogeo.tistory.com BlogIcon 에코지오 2008.04.29 13:04 신고 PERM. MOD/DEL REPLY

    재밌겠네요. 저도 도전해보고 싶어요...... 시간이 되면요... -.-;;

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.04.29 18:49 신고 PERM MOD/DEL

    넹 헤헷 15줄을 목표로 ㄱㄱㅆ!!!

  2. Favicon of http://dev.daewoobrenic.co.kr BlogIcon setq 2008.06.05 11:12 PERM. MOD/DEL REPLY

    정상적인 코드로 해봤습니당.

    public class Maker {

    private static final String digits = "IVXLCDMↁ";

    public String convert(int i) {
    assert (i > 0 && i < 9000);
    StringBuilder sb = new StringBuilder();

    for (int k = 0; k < digits.length() && i > 0; k += 2) {
    int mod = i % 10;
    i = (i - mod) / 10;
    if (mod % 5 == 4) {
    sb.append(digits.charAt(k + (mod + 1) / 5));
    mod = 1;
    }
    for (int j = 0; j < mod % 5; j++) {
    sb.append(digits.charAt(k));
    }
    sb.append(mod >= 5 ? digits.charAt(k + 1) : "";);
    }
    return sb.reverse().toString();
    }

    }

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2008.06.05 15:26 PERM MOD/DEL

    우와~ 멋지신데요. 정답이겠네요.

  3. Favicon of http://dev.daewoobrenic.co.kr BlogIcon setq 2008.06.07 00:17 PERM. MOD/DEL REPLY

    조금 더 줄여봤습니다.

    public class Maker {

    private static final String digits = "IVXLCDMↁ";

    private static final String[] positions = { "", "1", "11", "111", "21",
    "2", "12", "112", "1112", "31" };

    public String convert(int i) {
    assert (i > 0 && i < 9000);
    StringBuilder sb = new StringBuilder();
    for (int k = 0; k < digits.length() && i > 0; k += 2, i/=10) {
    for (int j = 0; j < positions[(i % 10)].length(); j++) {
    sb.append(digits.charAt(k + positions[(i % 10)].charAt(j) - '1'));
    }
    }
    return sb.reverse().toString();
    }
    }

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.06.08 23:57 신고 PERM MOD/DEL

    넹 저에겐 좀 어려운 코드지만 멋지시네요. :)

Write a comment.