본문 바로가기
lecture.js/algorithm.log

#011 한글로 변환

by malda 2017. 7. 18.
#문제)
숫자를 한글로 변환하는 코드를 작성하여라

입력 : 2536 
출력 : 이천오백삼십육

먼저 자리수에 대한 한글화, 숫자에 대한 한글화 배열을 만들어야한다.
기본적으로 한글로 출력하려면 먼저 자리수에 숫자에 대한 한글 변환, 자리수에 대한 한글변환이 이뤄지는 것을 알 수 있다.
또한, 0의 경우 한글화할 필요 없고, 첫번째 자리수는 한글화할 필요가 없다는 것을 알 수 있다.

구현방법은 먼저 자리수를 알아낸 후 자리수가 0보다 크거나 작을때까지 반복한다.
입력된 값을 자리수만큼 나누고 나눈 값을 이용해 한글화 처리를 한다. (배열 인덱스 접근)
또한 자리수를 이용해 한글화 처리를 한다. (자리수 배열 인덱스 접근)


*자리수를 알아 내고 싶은데, String일 경우 length로 길이 알아 낸 후 Math.pow(10, length-1)하면 자리수를 구해낼 수 있는뎅
int형이면 어떻게 알아 낼 수 있는지 몰랐는데 찾았다. Math.log10(value)+1 로 구하면 된다.

package dataStructure.prediction;

public class NumberToKoreanLabel {

  //number convert korean
    private String[] number_labels = { "", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"};
    private String[] range_labels = {"", "십", "백", "천", "만", "십만", "백만", "천만", "억", "십억"};
   
   
    public void execute(String value) {
        int rangeCount = value.length()-1;
        int rawValue = Integer.valueOf(value);
        StringBuilder result = new StringBuilder();
        while(rangeCount >= 0) {
            int mod = (int)Math.pow(10, rangeCount);
            result.append(number_labels[rawValue/mod]);
            if(rawValue/mod > 0) {
                result.append(range_labels[rangeCount]);
            }
            rawValue = rawValue % mod;
            rangeCount--;
        }
        System.out.println(result.toString());
    }
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NumberToKoreanLabel koreanLabel = new NumberToKoreanLabel();
        koreanLabel.execute(String.valueOf(Integer.MAX_VALUE));
    }

}

'lecture.js > algorithm.log' 카테고리의 다른 글

#013 선택 정렬  (0) 2017.07.18
#012 버블 정렬  (0) 2017.07.18
#010 소인수분해  (1) 2017.07.12
#009 소수 판별  (0) 2017.07.12
#008 고속버스 배치  (0) 2017.07.12