본문 바로가기

Programming/Project Euler118

[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.
[C/C++] 프로젝트 오일러 #31 : 코인들의 합 영국에는 아래와 같은 동전 단위가 있습니다:• 1p, 2p, 5p, 10p, 20p, 50p, 1파운드(100p), 2파운드(200p)목표는 200펜스(2파운드)를 만들기 위해, 위 동전들을 활용한 서로 다른 조합의 수를 찾는 것입니다.조건:1. 동전은 필요한 만큼 반복적으로 사용할 수 있습니다.2. 순서는 중요하지 않습니다. (즉, {1p, 2p}는 {2p, 1p}와 동일한 조합으로 간주됩니다.)3. 중복된 조합을 제거한 고유한 조합의 수를 구해야 합니다. 이번문제는 재귀 함수를 만들어서 프로그램을 작성했습니다. 예를 들어서 200 파운드를 계산하기 위해서 첫번째 가장 큰 단위의 코인을 쓸 것인지부터 몇개를 쓸것인지 결정하여서 나머지 돈에 대해서 그 다음 단위의 코인을 이용하여 경우의 수를 따졌습니다... 2015. 3. 30.
[C/C++] 프로젝트 오일러 #30 : 각 자릿수의 5제곱의 합 Project Euler 문제 #30은 각 자리의 숫자를 다섯 번째 거듭제곱한 값의 합이 자신과 같은 숫자들을 찾는 문제입니다. 문제에서는 한 자리 숫자는 조건을 만족할 수 없으므로 최소 두 자리 이상의 숫자부터 탐색해야 합니다.이를 해결하기 위해, 특정 숫자의 각 자리 숫자를 다섯 번째 거듭제곱한 값들의 합을 계산하고, 이 합이 원래 숫자와 동일한 경우를 찾습니다. 조건을 만족하는 모든 숫자를 구한 후, 이 숫자들의 합을 계산하는 것이 문제의 목표입니다.효율적인 계산을 위해 탐색 범위를 설정해야 하며, 숫자의 자리수가 증가함에 따라 다섯 번째 거듭제곱의 합이 해당 숫자를 초과하지 않는 범위를 고려하여 상한선을 정합니다. 이를 통해 필요한 계산을 제한하여 문제를 해결합니다. 문제 자체의 난이도는 그리 어.. 2015. 3. 30.
[C/C++] 프로젝트 오일러 #29 서로 다른 n제곱 개수 이번 문제는 중복을 처리하는 문제이기는 하지만,숫자의 범위가 큰 까닭에, big integer를 써서 처리를 하든지, 아니면 무언가 다른 방도를 생각해서 해주어야 합니다. 서로 다른 n제곱 갯수를 구하기 위해서는 다음과 같은 생각을 좀 해주어야 합니다. 서로 다른, a, b (b > a) 에 대하여, am, bn이 갈은 수가 되기 위해서는 반드시, b는 a의 제곱승이어야 합니다.  그렇지 않다면, 같은 숫자가 나올 수가 없습니다. 이것을 토대로 해서 프로그램을 작성해보았습니다. 전반부 프로그램은 제곱수가 아닌 a 에 대하여 ak을 모두 체크하고, 그 때의 연산 결과를 1승만 가능한 경우, 2승까지 가능한 경우, 3승까지 가능한 경우 등등으로 나누어서 그 출력값을 미리 v란 배열.. 2015. 3. 7.
[C/C++] 프로젝트 오일러 #28 : 회전하는 숫자들의 대각선 합 이 프로그램은 사실 원하는 배열을 잡고, 숫자를 배열한 후에 대각선의 합을 구해도 됩니다.그렇게 한다고 해서 시간이 엄청 걸리는 것도 아니니 말이죠. 그러나 처음 제가 이 프로젝트 오일러 글들을 쓰면서, 어떻게 하면 보다 빠르게 계산할 것인가를 고민했기 때문에, 이 문제 역시 복잡도를 낮추어 계산하도록 하였습니다. 1부터 N까지의 합, 제곱 합 등의 공식을 도출할 줄 안다면, 이 문제 역시 간단하게 하나의 식으로 만들 수 있습니다. 여기서는 다음과 같은 식이 나오게 됩니다. result=1+8n(n+1)(2n+1)3+2n(n+1)+4n  이 수식에 따라서 구한 프로그램은 다음과 같습니다.역시 이 프로그램은 참고용으로만 해주세요.//-----------.. 2015. 3. 4.
728x90