프로젝트 오일러68 [C/C++] 프로젝트 오일러 #43 : 부분 문자열 나누어 떨어지기 Project Euler #43 - Sub-string Divisibility 문제는 특정한 성질을 만족하는 팬디지털(pandigital) 숫자를 찾고, 그들의 합을 구하는 문제입니다. 이번 문제도 간단한 문제입니다. (난이도 5%) 문제 설명 0부터 9까지의 숫자를 각각 한 번씩만 사용하여 만들 수 있는 10자리 숫자를 09 팬디지털 숫자라고 합니다. 예를 들어, 1406357289는 10자리 0~9 팬디지털 숫자입니다.이 문제에서는 단순히 팬디지털 숫자를 생성하는 것이 아니라, 특정한 부분 문자열(sub-string) 이 특정한 소수(prime number)로 나누어지는지를 검사해야 합니다. 구체적으로, 10자리 팬디지털 숫자에서 아래 조건을 만족하는 숫자를 찾아야 합니다. 조건 - 부분 문자열이 .. 2016. 5. 25. [C/C++] 프로젝트 오일러 #42 : 삼각수 단어 이 문제는 알고리즘이 크게 필요하지는 않습니다.그래서인지 문제의 난이도는 5%입니다. 어떤 단어의 알파벳 값을 다음과 같이 정의할 수 있습니다. 각 알파벳은 A=1, B=2, C=3, …, Z=26의 값을 가지며, 단어의 알파벳 값은 각 문자에 해당하는 숫자를 더한 값입니다. 예를 들어, “SKY”라는 단어는 S=19, K=11, Y=25이므로, 알파벳 값은 19 + 11 + 25 = 55가 됩니다.한편, 삼각수(triangle number)는 다음과 같은 공식으로 계산할 수 있습니다.Tn=n(n+1)2 여기서 n 은 자연수이며, 예를 들어 첫 몇 개의 삼각수는 1, 3, 6, 10, 15, 21, … 과 같이 됩니다.주어진 단어 리스트에서 단어의 알파벳 값이 삼각수와 같은.. 2016. 5. 24. [C/C++] 프로젝트 오일러 #41 : 팬디지털 소수 이 문제의 난이도 5%입니다. 그렇게 어렵지 않은 문제이죠.문제를 살펴보면 다음과 같습니다.우리는 1부터 n까지 정확하게 한번씩만 사용한 n자리 숫자가 있다면, 이것을 팬디털(pandigital) 숫자라고 부릅니다. 예를 들어서 2143은 4자리 팬디지털 숫자이면서, 또한 소수입니다.가장 큰 n자리 팬디지털 소수는 얼마일까요?일단 팬디지털이라는 것을 알았으면, 우리는 간단하게 1~9까지 한번만 사용해서 이 숫자를 구하면 됩니다.팬디지털을 만들 수 있는 가장 큰 자릿수는 9자리입니다. 왜냐하면 그 이상부터는 두자리숫자가 될 수밖에 없기 때문에 팬디지털 정의에 어긋납니다.프로그램은 9자릿수부터 만들 수 있는 모든 팬디지털수를 만듭니다. (사실 이것을 1부터 n까지 배열하는 순열수입니다.) 순열 수 중에 사실.. 2015. 10. 27. [C/C++] 프로젝트 오일러 #34 : 자릿수의 팩토리얼 합(구현) 이번 문제는 각각의 자릿수의 팩토리얼 합이 자신이 되는 숫자를 찾는 것입니다. 예를 들어서 145란 숫자는, 1!+4!+5!=1+24+120=145 가 됩니다. 이번 문제는 이와 비슷한 숫자들의 합을 구하는 것입니다. 이제 프로젝트 오일러를 이정도까지 진행하셨다면, 십진수의 자릿수를 빼는 것에는 다들 어느정도 경험이 있을 것이라 생각합니다. 제 경우에는 각 자릿수의 팩토리얼 값을 미리 저장해서 사용했습니다.9! = 362880 이므로, 대충 6자릿수자일거라고 생각하면 됩니다. 그래서 숫자범위를 그렇게 정했습니다. 제가 작성한 프로그램은 다음과 같습니다.//------------------------------------------------// Project Eul.. 2015. 4. 13. [C/C++] 프로젝트 오일러 #33 : 약분하는 추가 숫자 #33의 난이도는 5%네요. 쉬운 등급으로 설정된 문제입니다. Project Euler #33 문제는 “Digit Cancelling Fractions”에 관한 내용입니다. 이 문제는 분모와 분자가 두 자리 수인 분수 중에서 특별한 조건을 만족하는 분수를 찾는 것입니다. 조건은 분자와 분모에 같은 숫자가 있을 때, 그 숫자를 단순히 “지우는” 방식으로 만든 새로운 분수가 원래 분수와 값이 같아야 한다는 것입니다.예를 들어, 분수 4998 은 특별한 분수입니다. 이 분수에서 분자와 분모의 9를 지우면 48 이 됩니다. 두 분수 4998 과 48 은 서로 값이 같으므로 조건을 만족합니다. 그러나, 이 문제에.. 2015. 4. 13. [C/C++] 프로젝트 오일러 #32 : 팬디지털 곱 프로젝트 오일러 #32 문제는 어려움 정도가 5%라 상당히 난이도가 낮은 문제네요. 팬디지털 숫자란 특정 범위의 모든 숫자를 한 번씩만 사용하여 구성된 숫자입니다. 예를 들어, 1부터 9까지의 숫자를 모두 한 번씩 포함한 조합(예: 123456789, 391867254 등)은 팬디지털이라고 부릅니다. 이 문제에서는 1부터 9까지의 숫자를 정확히 한 번씩만 사용해야 한다는 조건이 주어집니다.문제의 목표는 1부터 9까지의 숫자를 사용해 a×b=c 형태의 곱셈식을 만들고, a, b, c를 모두 이어 붙였을 때 1부터 9까지의 모든 숫자를 포함하도록 하는 조합을 찾는 것입니다. 예를 들어, 39×186=7254는 39, 186, 7254를 합쳐 391867254라는.. 2015. 4. 13. 이전 1 ··· 4 5 6 7 8 9 10 ··· 12 다음 728x90