본문 바로가기

Project Euler42

[C/C++] 프로젝트 오일러 #41 : 팬디지털 소수 이 문제의 난이도 5%입니다. 그렇게 어렵지 않은 문제이죠.문제를 살펴보면 다음과 같습니다.우리는 1부터 n까지 정확하게 한번씩만 사용한 n자리 숫자가 있다면, 이것을 팬디털(pandigital) 숫자라고 부릅니다. 예를 들어서 2143은 4자리 팬디지털 숫자이면서, 또한 소수입니다.가장 큰 n자리 팬디지털 소수는 얼마일까요?일단 팬디지털이라는 것을 알았으면, 우리는 간단하게 1~9까지 한번만 사용해서 이 숫자를 구하면 됩니다.팬디지털을 만들 수 있는 가장 큰 자릿수는 9자리입니다. 왜냐하면 그 이상부터는 두자리숫자가 될 수밖에 없기 때문에 팬디지털 정의에 어긋납니다.프로그램은 9자릿수부터 만들 수 있는 모든 팬디지털수를 만듭니다. (사실 이것을 1부터 n까지 배열하는 순열수입니다.) 순열 수 중에 사실.. 2015. 10. 27.
[C/C++] 프로젝트 오일러 #29 서로 다른 n제곱 개수 이번 문제는 중복을 처리하는 문제이기는 하지만,숫자의 범위가 큰 까닭에, big integer를 써서 처리를 하든지, 아니면 무언가 다른 방도를 생각해서 해주어야 합니다. 서로 다른 n제곱 갯수를 구하기 위해서는 다음과 같은 생각을 좀 해주어야 합니다. 서로 다른, a, b (b > a) 에 대하여, \(a^m\), \(b^n\)이 갈은 수가 되기 위해서는 반드시, b는 a의 제곱승이어야 합니다.  그렇지 않다면, 같은 숫자가 나올 수가 없습니다. 이것을 토대로 해서 프로그램을 작성해보았습니다. 전반부 프로그램은 제곱수가 아닌 a 에 대하여 \(a^k\)을 모두 체크하고, 그 때의 연산 결과를 1승만 가능한 경우, 2승까지 가능한 경우, 3승까지 가능한 경우 등등으로 나누어서 그 출력값을 미리 v란 배열.. 2015. 3. 7.
[C/C++] 프로젝트 오일러 #22 : 이름 점수 구하기 이 문제에서는 주어진 텍스트 파일에 포함된 이름들의 점수 합계를 계산하는 것을 요구합니다. 문제를 해결하기 위한 단계는 다음과 같습니다:1. 입력 파일 읽기: 파일에서 각각의 이름이 큰따옴표로 묶여 있는 쉼표로 구분된 단일 행 데이터를 읽습니다.2. 이름을 알파벳 순으로 정렬: 이름 리스트를 알파벳 오름차순으로 정렬합니다.3. 이름 점수 계산:• 각 이름의 점수를 계산합니다. 이름의 점수는 이름을 구성하는 각 글자의 알파벳 값을 더하여 구합니다 (A=1, B=2, …, Z=26).• 해당 이름 점수에 정렬된 순서(1부터 시작하는 인덱스)를 곱합니다.4. 전체 점수 계산: 모든 이름 점수를 합산하여 최종 결과를 구합니다.예를 들어, 파일에 "COLIN", "ALEX", "BOB"가 포함되어 있다면, 정렬된.. 2015. 1. 25.
9. 프로젝트 오일러 #9 : 합이 1,000인 피타고라스 수 구하기 이번 문제는 합이 1,000인 피타고라수 수 구하기입니다. 피타고라스 수의 일반항은 이미 잘 나와 있어서, 그 공식을 이용하면, 손쉽게 프로그램으로 만들 수 있습니다. 을 이용해서 피타고라스 쌍을 구하도록 합니다. G(s, t) = 1 인 수를 구하면, 원래 배수가 아닌 피타고라스 쌍을 얻을 수 있지만, 배수인 쌍으로도 나올 수 있기 때문에, 여기서는 s > t 라는 조건만 걸어서 제작했습니다. 단 무한대로 검사할 수 없으므로, 프로그램에서는 x+y+z 2014. 12. 23.
[C/C++] 프로젝트 오일러 #2 피보나치 수열의 짝수항 합(동적 프로그래밍) C/C++ 언어를 배우다보면, 꼭 한번은 프로그램해보는 것이 있다면, 피보나치 수열일거라 생각합니다.  피보나치 수열은 재귀함수를 사용한 곳에서도 많이 나오지만, 동적 프로그램이 필요한 예로도 자주 사용됩니다. 피보나치 수열은 한쌍의 토끼의 개체수 증가라는 퀴즈 형태에서 출발한 것인데요.  꼭 토끼가 아니라도 대장균의 증식같은 데에서도 응용할 수 있습니다.  기하함수로 증가하는 곡선을 보이게 됩니다. 피보나치는 아주 간단한 점화식을 이용합니다. \[ F_{n} = F_{n-1} + F_{n-2} \] 점화식을 보면 아주 간단한 형태입니다.  전항과 전전항을 더한 값이 현재항의 값이 됩니다. 그래서  첫번째 항과 두번째 항이 초기값으로 주어져야 합니다.  첫번째 항은 1, 두번째 항은 1입니다.  자연수 .. 2014. 12. 19.
프로젝트 오일러 #0 시작하며 프로젝트 오일러가 요즘 프로그래머(아 제가 좀 늦었을지는 모르겠지만)들에게 인기가 있어서, 프로젝트 오일러를 조금 다른 시각으로 풀어볼려고 합니다. 벌써 문제가 몇백개가 되어놓아서, 이 연재는 과연 얼마나 오래 걸릴지는 잘 모르겠습니다. 일단, 제가 가장 중요하게 생각하는 것은 효율성입니다. for 루프 등을 이용하면 쉽게 만들 수 있는 프로그램이지만, 여기서는 가장 효율적인 프로그램을 이용해서 만들어볼려고 합니다. 물론 한계가 있어서 가장 효율적인 프로그램이 안 될 수도 있겠지만요. 오일러 프로젝트를 검색했더니, 답을 넣으면 풀 수 있는 사이트가 있네요.(영문 사이트 : https://projecteuler.net/, 한글 번역 사이트 : http://euler.synap.co.kr/)제가 다른 프로그.. 2014. 12. 18.