Script / CSS

G1sUtil.js

G1sBlogger.js

G1sNavigationList.js

G1sCode

Posts List


2012년 2월 29일 수요일

[Project Euler] 17. 1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는?

17. 1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는?
1부터 5까지의 숫자를 영어로 쓰면 one, two, three, four, five 이고,
각 단어의 길이를 더하면 3 + 3 + 5 + 4 + 4 = 19 이므로 사용된 글자는 모두 19개입니다.

1부터 1,000까지 영어로 썼을 때는 모두 몇 개의 글자를 사용해야 할까요?

참고: 빈 칸이나 하이픈('-')은 셈에서 제외하며, 단어 사이의 and 는 셈에 넣습니다.
  예를 들어 342를 영어로 쓰면 three hundred and forty-two 가 되어서 23 글자,
  115 = one hundred and fifteen 의 경우에는 20 글자가 됩니다.
Click

이것도 일반화를 해볼려다가 여러가지 생각해야 할게 너무 많아 그냥 포기.
각각의 수가 얼마나 들어가는지를 암산하여 각 수의 영어 알파벳 숫자와 곱해주었습니다.
<script>
function p017(){
 var nums = {
  1: "one",
  2: "two",
  3: "three",
  4: "four",
  5: "five",
  6: "six",
  7: "seven",
  8: "eight",
  9: "nine",
  10: "ten",
  11: "eleven",
  12: "twelve",
  13: "thirteen",
  14: "fourteen",
  15: "fifteen",
  16: "sixteen",
  17: "seventeen",
  18: "eighteen",
  19: "nineteen",
  20: "twenty",
  30: "thirty",
  40: "forty",
  50: "fifty",
  60: "sixty",
  70: "seventy",
  80: "eighty",
  90: "ninety",
  100: "hundred",
  1000: "thousand"
 };
 
 var l = 0;//46684//17524
 var t = nums[100].length;
    
 //1의 자리 : 100당 9번씩 10번 + (100의자리) 100번 + (천의자리) 1만 1번.
 for (var i = 1; i < 10; i++) 
  l += nums[i].length * ((9 * 10) + 100 + ((i == 1) ? 1 : 0));
 //10~19 : 100당 1번씩 10번.
 for(var i=10; i<20; i++)
  l += nums[i].length * (1*10);
 //10의 자리 : 100당 10번씩 10번.
 for(var i=20; i<100; i+=10)
  l+= nums[i].length * (10*10);
 //100 : 100당 100씩 9번.
 l += nums[100].length * (100*9);
 //1000 : 1 번.
 l += nums[1000].length * 1;
 //and : 100당 99번씩 9번.
 l += "and".length * (99*9); 
 
 return l;
}
</script>

댓글 없음:

댓글 쓰기