본문 바로가기
반응형

분류 전체보기146

[C++]프로젝트 오일러 21번 문제&풀이 (10000 이하 모든 친화수(우애수)의 합은?) 문제 21번 n의 약수들 중에서 자신을 제외한 것의 합을 d(n)으로 정의했을 때, 서로 다른 두 정수 a, b에 대하여 d(a) = b 이고 d(b) = a 이면 a, b는 친화쌍이라 하고 a와 b를 각각 친화수(우애수)라고 합니다. 예를 들어 220의 약수는 자신을 제외하면 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 이므로 그 합은 d(220) = 284 입니다. 또 284의 약수는 자신을 제외하면 1, 2, 4, 71, 142 이므로 d(284) = 220 입니다. 따라서 220과 284는 친화쌍이 됩니다. 10000 이하의 친화수들을 모두 찾아서 그 합을 구하세요. 접근방법 1. 자신을 제외한 약수들의 합을 구하는 함수(calSum)를 만든다. (벡터(vec)에 약수들.. 2020. 12. 5.
[C++]프로젝트 오일러 20번 문제&풀이 (100! 의 자릿수를 모두 더하면?) 문제 20번 n! 이라는 표기법은 n × (n − 1) × ... × 3 × 2 × 1을 뜻합니다. 예를 들자면 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 이 되는데, 여기서 10!의 각 자릿수를 더해 보면 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 입니다. 100! 의 자릿수를 모두 더하면 얼마입니까? 접근방법 1. 파이썬으로 하면 간단하겠으나, C++는 자료형을 고려해서 풀어야 하기 때문에 조금 번거롭다. 2. 충분히 긴 벡터(numVector(200))를 만들고, 첫번째 자리에 1을 넣는다. 3. 벡터의 각 요소에 각 자리수가 들어가도록 할건데, 숫자를 그대로 넣고 10으로 나눠서 나머지는 남기고, 몫은 한칸씩 옆으로 보내 더해준다.(1의자리수가 numVe.. 2020. 12. 4.
[C++]프로젝트 오일러 19번 문제&풀이 (20세기에서, 매월 1일이 일요일인 경우는 몇 번?) 문제 19번 다음은 달력에 관한 몇 가지 일반적인 정보입니다 (필요한 경우 좀 더 연구를 해 보셔도 좋습니다). 1900년 1월 1일은 월요일이다. 4월, 6월, 9월, 11월은 30일까지 있고, 1월, 3월, 5월, 7월, 8월, 10월, 12월은 31일까지 있다. 2월은 28일이지만, 윤년에는 29일까지 있다. 윤년은 연도를 4로 나누어 떨어지는 해를 말한다. 하지만 400으로 나누어 떨어지지 않는 매 100년째는 윤년이 아니며, 400으로 나누어 떨어지면 윤년이다 20세기 (1901년 1월 1일 ~ 2000년 12월 31일) 에서, 매월 1일이 일요일인 경우는 총 몇 번입니까? 접근방법 1. 매월 1일 & 일요일을 판명해야 하므로, (연 X 월)로 이루어진 2차원 배열을 만든다. 2. 1900년 1.. 2020. 12. 3.
[C++]프로젝트 오일러 18번 문제&풀이 (삼각형을 따라 내려가면서 합이 최대가 되는 경로 찾기) 문제 18번 다음과 같이 삼각형 모양으로 수를 배열했습니다. 3 7 4 2 4 6 8 5 9 3 삼각형의 꼭대기부터 아래쪽으로 인접한 수를 찾아 내려가면서 합을 구하면, 위의 그림처럼 3 + 7 + 4 + 9 = 23 이 가장 큰 합을 갖는 경로가 됩니다. 다음 삼각형에서 합이 최대가 되는 경로를 찾아서 그 합을 구하세요. 75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 .. 2020. 12. 2.
[C++]프로젝트 오일러 17번 문제&풀이 (1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는?) 문제 17번 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 글자가 됩니다. 접근방법 1. 숫자와 글자 갯수를 배열(array)에 담아 해당 수가 나오면 출력하는 구조로 진행. 2. 일단 배열에 글자 갯수를 넣어야.. 2020. 11. 26.
[C++]프로젝트 오일러 16번 문제&풀이 (2의 1000승의 각 자릿수를 모두 더하면?) 문제 16번 2^15 = 32768 의 각 자릿수를 더하면 3 + 2 + 7 + 6 + 8 = 26 입니다. 21000의 각 자릿수를 모두 더하면 얼마입니까? 접근방법 1. 2의 1000승을 계산 한 후 10씩 나누어 더하려고 하면, 담을 수 있는 연산자가 없기 때문에 풀 수 없다. 2. 1부터 시작해서 2씩 곱해 갈 때 바로바로 자릿수를 구하여, 각 자릿수를 벡터에 거꾸로 담는다. (벡터는 뒤에서부터 숫자가 담기기 때문 / 모든 값을 0으로 시작하고, 첫번째 위치에 1을 담고 시작한다.) 3. 각 자릿수를 2를 곱했을 때, 10을 넘지 않는 경우와 / 넘는 경우 2가지로 나눈다. (10을 넘는 경우, 그 칸에는 10으로 나눈 나머지를 넣고, 옆칸에 1을 더한다) 2^10까지만 해보면 2^0 : 1 / .. 2020. 11. 25.
반응형