영화 ‘알라딘’을 봤거나 ‘알라딘과 요술 램프’ 이야기를 아는 사람이라면
소원을 들어주는 지니를 한 번쯤 만나고 싶어 하죠.
그런데 오일러 프로젝트에 코딩 지니가 나타났습니다.
풀고 싶은 문제를 모두 말해주세요! 어렵지 않다면 해결해 드릴게요!
“혹시 다음 오일러 프로젝트 문제가 정해지지 않았다면, 17번 문제를 풀어주실 수 있나요?”
폴리매스 홈페이지의 오일러 프로젝트 게시판에 예상치 못한 댓글이 달렸습니다. 여태껏 파이썬이나 C언어로 문제를 해결한 댓글은 많았지만, ‘이 문제를 풀어주세요!’라는 댓글은 처음이었거든요. 6개월 동안 코딩을 다뤘으니 뭐든 풀 수 있다는 자신감으로 7월호에서 풀어보겠다며 호기롭게 답글을 달았습니다.
17번 문제는 지금까지 푼 오일러 프로젝트 문제와는 조금 다릅니다. 관련된 수학 개념은 없지만, 수학을 배울 때 필요한 수를 읽고 쓰는 내용을 다루죠. 그래서 이번 호에서는 세계 여러 나라에서 수를 어떻게 읽는지 알아보려고 합니다.
여러분은 숫자 ‘1’을 어떻게 읽나요? ‘일’ 또는 ‘하나’, ‘첫째’ 등 다양한 단어로 읽을 수 있습니다. 모두 1을 나타내는 표현으로, 수학에서는 주로 한자어인 ‘일(一)’을 사용합니다. 그리고 10진법에 맞춰 십, 백, 천 등의 단위에 수를 나타내는 말을 붙여 수를 읽습니다. 123을 (일)백 이십 삼으로 읽듯이요. 같은 한자 문화권에 속하는 일본과 중국도 한자어로 수를 읽습니다.
영어는 어떨까요? 1부터 10까지는 우리와 비슷하게 각 숫자를 나타내는 고유 단어로 부릅니다. 하지만 우리와 다르게 11과 12로 넘어가도 ‘eleven’, ‘twelve’와 같이 고유 단어로 부릅니다. 이렇게 19까지 고유 단어로 읽고 20부터 10진법 체계로 읽죠. 일부 언어학자들은 이 방식을 옛날에 사용하던 20진법의 흔적으로 보기도 합니다.
2014년 캐런 퍼슨 미국 노스웨스턴대학교 명예교수와 에핑 리 텍사스A&M대학교 교수팀은 수를 읽을 때 사용하는 언어가 수학 능력에 영향을 준다는 연구 결과를 발표했습니다. 숫자가 10 이상으로 올라갈 때 한자에서는 10진법 체계대로 수를 읽지만, 서양 언어에는 10진법에 맞지 않는 단어가 등장하면서 복잡해지는데, 한자로 읽는 방식이 덧셈, 뺄셈을 익히기에 더 유용하다고 주장했습니다. 물론 언어로 수학 실력의 차이를 모두 설명할 수는 없지만, 새삼 수 읽기의 중요성을 깨닫게 하는 내용이었죠.
이번에는 영어로 숫자를 읽는 방식을 컴퓨터 언어로 나타내고, 닉네임 ‘나랃말싸미 듕귁에’ 님이 요청한 17번 문제를 풀어보겠습니다.
※ 편집자 주
코딩의 ‘코’자도 모르는 코.알.못. 홍 기자가 수학 문제를 코딩으로 푸는 오일러 프로젝트 문제를 하나하나 해결해 나갈 예정입니다. 오일러 프로젝트는 수학과 프로그래밍 실력을 모두 키울 수 있도록 2001년에 만든 수학 문제 웹사이트입니다. 홍 기자와 함께한다면 수학과 파이썬 모두 정복할 수 있지 않을까요?
파이썬 완전정복! ‘수를 영어로 읽는 함수 만들기’
17번 문제를 해결하는 데 필요한 파이썬 명령어입니다.
꿀팁 중의 꿀팁, 밑줄 쫙! 핵심만 소개하니 꼭 익혀두세요!
1. 두 자릿수까지 읽는 함수
1부터 19까지는 규칙 없이 각각 다른 이름이 붙기 때문에 리스트로 일일이 지정해줘야 합니다. 리스트 s1에 s1 = [‘’, ‘one’, ‘two’, … , ‘nineteen’]을 저장합니다.
20부터 99까지는 한자처럼 10진법 체계로 읽으니 읽으려는 수를 10으로 나누는 방법을 써서 함수로 나타냅니다. 몫이 십의 자릿수, 나머지가 일의 자릿수가 되며, 십의 자릿수에 대응하는 영어 이름을 읽고 그 뒤에 일의 자릿수의 이름을 붙이면 됩니다.
2. 서너 자릿수를 읽는 함수
백의 자릿수를 읽는 방법도 십의 자릿수와 비슷하게 100으로 나눈 몫에 hundred를 붙여 읽습니다. 그리고 나머지는 일, 십의 자릿수를 읽었던 코드로 읽습니다. 주의할 점은 나머지가 0일 때는 백의 자릿수만 읽고, 0이 아니라면 백과 십의 자릿수 사이에 and를 넣어야 합니다. 200은 two hundred, 345는 three hundred and forty five로 읽는 것처럼요. 마지막으로 1000은 one thousand이므로 ans=‘onethousand’로 나타냅니다.
도전! 오일러 프로젝트 17번 문제 뽀개기
앞서 익힌 파이썬 명령어를 이용해 수학 문제를 풀어봅시다. 오일러 프로젝트 문제는
코드를 잘만 짜면 1분 이내에 답을 얻을 수 있으니, 직접 한번 실행해보세요!
오일러 프로젝트 사상 처음으로 독자의 요청을 받아 문제를 풀어봤습니다. 수학과 영어가 절묘하게 만난 재밌는 문제였는데, 해답 코드가 너무 길어 모두 보여줄 수 없어 아쉽네요.
다음에는 폴리매스 홈페이지에 ‘최산’ 님이 올려주신 45번 문제를 풀어볼 건데요, 삼각수, 오각수, 육각수 등 기하학적인 수에 대해 다룰 예정입니다. 오일러 문제 제보는 계속해서 받고 있으니 해당 게시물에 댓글로 참여해주세요~!