-->

별의 공부 블로그 🧑🏻‍💻
728x90

문제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 글자가 됩니다.


문제 해결 방법


  • 100 이상의 수의 경우, 100으로 나누어 떨어지는 수(100, 200, ..., 1000)를 제외한 수는 백의 자리와 십의 자리 수 사이에 and를 붙여서 계산해야 한다.
    • 101 : one hundred and one
    • 112 : one hundred and twelve
    • 121 : one hundred and twenty one
  • 배열  for 문을 이용하여 문제를 풀었다.

소스 코드


#include <iostream>
using namespace std;
#define SIZE 1000
enum {
ONE = 1, TWO = 2, THREE = 3, FOUR = 4, FIVE = 5, SIX = 6, SEVEN = 7, EIGHT = 8, NINE = 9, TEN = 10,
ELEVEN = 11, TWELVE = 12, THIRTEEN = 13, FOURTEEN = 14, FIFTEEN = 15, SIXTEEN = 16, SEVENTEEN = 17, EIGHTEEN = 18, NINETEEN = 19, TWENTY = 20,
THIRTY = 30, FORTY = 40, FIFTY = 50, SIXTY = 60, SEVENTY = 70, EIGHTY = 80, NINETY = 90, HUNDRED = 100, THOUSAND = 1000, AND = 3
};
int main () {
int ary[SIZE + 1] = {0};
ary[0] = 0, ary[ONE] = 3; ary[TWO] = 3; ary[THREE] = 5; ary[FOUR] = 4; ary[FIVE] = 4;
ary[SIX] = 3; ary[SEVEN] = 5; ary[EIGHT] = 5; ary[NINE] = 4; ary[TEN] = 3; ary[ELEVEN] = 6;
ary[TWELVE] = 6; ary[THIRTEEN] = 8; ary[FOURTEEN] = 8; ary[FIFTEEN] = 7; ary[SIXTEEN] = 7; ary[SEVENTEEN] = 9;
ary[EIGHTEEN] = 8; ary[NINETEEN] = 8; ary[TWENTY] = 6; ary[THIRTY] = 6; ary[FORTY] = 5; ary[FIFTY] = 5;
ary[SIXTY] = 5; ary[SEVENTY] = 7; ary[EIGHTY] = 6; ary[NINETY] = 6; ary[HUNDRED] = 7; ary[THOUSAND] = 8;
int sum = 0;
for (int i = 1; i <= SIZE; i++) {
if (i >= ONE && i <= TEN) {
sum += ary[i];
// cout << i << " " << i << " " << sum << endl;
}
else if (i > TEN && i < HUNDRED) {
if (i >= 11 && i < 20) {
sum += ary[i]; // 10의 자리 + 1의 자리
}
else {
if (i % 10 == 0) {
sum += ary[(i / 10) * 10]; // 10의 자리
}
else {
sum += ary[(i / 10) * 10]; // 10의 자리
sum += ary[i % 10]; // 1의 자리
}
}
// cout << i << " " << (i / 10) * 10 << i % 10 << " " << sum << endl;
}
else if (i >= HUNDRED && i < THOUSAND) {
if (i % 100 == 0) {
sum += ary[i / 100]; // 100의 자리
sum += ary[100]; // HUNDRED
}
else {
sum += ary[i / 100]; // 100의 자리
sum += ary[100]; // HUNDRED
sum += AND; // AND
if ((i % 100) >= 1 && (i % 100) < 10) {
sum += ary[i % 10]; // 1의 자리
}
else if ((i % 100) >= 10 && (i % 100) < 20) {
sum += ary[i % 100]; // 10의 자리 + 1의 자리
}
else {
sum += ary[((i % 100) / 10) * 10]; // 10의 자리
sum += ary[i % 10]; // 1의 자리
}
}
// cout << i << " " << i / 100 << ((i % 100) / 10) * 10 << i % 10 << " " << sum << endl;
}
else {
sum += ary[i / 1000]; // 1000의 자리
sum += ary[1000]; // THOUSAND
//cout << i << " " << 1000 << " " << sum << endl;
}
}
cout << sum << endl;
return 0;
}


정답


 21124





728x90


📖 Contents 📖
문제17 : 1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는?문제문제 해결 방법소스 코드정답