프로그래밍
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZd51w%2FbtqE6wmCdV7%2FuOAWm5uCjXZOnEZcXdnvYK%2Fimg.gif)
(파이썬)프로젝트 오일러(Project Euler)15.20×20 격자의 좌상단에서 우하단으로 가는 경로의 수
아래와 같은 2 × 2 격자의 왼쪽 위 모서리에서 출발하여 오른쪽 아래 모서리까지 도달하는 길은 모두 6가지가 있습니다 (거슬러 가지는 않기로 합니다). 그러면 20 × 20 격자에는 모두 몇 개의 경로가 있습니까? def fac(n): if n == 1: return 1 return n * fac(n - 1) for n in range(1, 21): count = fac(2 * n) / fac(n) / fac(n) print(f"{n} * {n}격자에서 경로 수: {count}\n") 고등학교 확통 단골 문제다. 첫 번째 방법은 모서리마다 숫자를 적고 목적지에 도착할때까지 더해가며 구하는 방법이다. 두 번째 방법은 순열을 이용하는 방법이다. 정직하게 격자 배열을 이동하는 문제이므로 순열을 이용하기로 했..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeigNL6%2FbtqE7z28r5m%2FAptDYKdtCt1L2dgrfmCaN0%2Fimg.jpg)
(C언어)프로젝트 오일러(Project Euler)14.백만 이하로 시작하는 우박수 중 가장 긴 과정을 거치는 것은?
양의 정수 n에 대하여, 다음과 같은 계산 과정을 반복하기로 합니다. n → n / 2 (n이 짝수일 때) n → 3 n + 1 (n이 홀수일 때) 13에 대하여 위의 규칙을 적용해보면 아래처럼 10번의 과정을 통해 1이 됩니다. 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 아직 증명은 되지 않았지만, 이런 과정을 거치면 어떤 수로 시작해도 마지막에는 1로 끝나리라 생각됩니다. (역주: 이것은 콜라츠 추측 Collatz Conjecture이라고 하며, 이런 수들을 우박수 hailstone sequence라 부르기도 합니다) 그러면, 백만(1,000,000) 이하의 수로 시작했을 때 1까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?참고: 계산 과정 도중에는 숫자가..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIwgQ6%2FbtqE0PZM1vy%2F9tZtIfbGw72Nxitk2eYrg0%2Fimg.jpg)
(파이썬)프로젝트 오일러(Project Euler)13.50자리 숫자 100개를 더한 값의 첫 10자리 구하기
아래에 50자리 숫자가 100개 있습니다. 이것을 모두 더한 값의 첫 10자리는 얼마입니까? 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 23067588207539346171171980310421047513778063246676 89261670696623633820136378418383684178734361726757 2811287981284997940806548193159262169127..
(C언어)프로젝트 오일러(Project Euler)12.500개 이상의 약수를 갖는 가장 작은 삼각수는?
1부터 n까지의 자연수를 차례로 더하여 구해진 값을 삼각수라고 합니다.예를 들어 7번째 삼각수는 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 이 됩니다. 이런 식으로 삼각수를 구해 나가면 다음과 같습니다. 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 이 삼각수들의 약수를 구해봅시다. 1: 1 3: 1, 3 6: 1, 2, 3, 6 10: 1, 2, 5, 10 15: 1, 3, 5, 15 21: 1, 3, 7, 21 28: 1, 2, 4, 7, 14, 28 위에서 보듯이, 5개 이상의 약수를 갖는 첫번째 삼각수는 28입니다. 그러면 500개 이상의 약수를 갖는 가장 작은 삼각수는 얼마입니까? #include int main() { int n = 0, i, sum, c..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLHUAA%2FbtqEo70wq1w%2FBSCkAJqhOhk2w5L2qUgaJk%2Fimg.jpg)
소수점 이하 자리에 나오는 0을 없애고 싶을 때
소수를 출력하기 위해서 형식지정자를 이용하는데, %f를 사용하면 소수점 이하 여섯자리까지 자동으로 출력됩니다. 그래서 3.14를 출력하고 싶어도 3.140000이 출력됩니다. 어떤 커뮤니티에서, 0이 출력되지 않게 하고 싶은데 어떻게 해야 하는지 질문하는 글이 올라와서 저도 궁금해졌습니다. 한참을 삽질하다가 아주 간단한 방법이 있음을 알았죠. 바로 형식지정자(format specifier)를 이용하는 것입니다. #include int main(void) { float pi = 3.14; printf("%%f를 사용했을 때:%f\n", pi); printf("%%e를 사용했을 때:%e\n", pi); printf("%%g를 사용했을 때:%g\n", pi); return 0; } %g 형식 지정자를 이용해 ..
(C언어)프로젝트 오일러(Project Euler)11. 20×20 격자에서 연속된 네 숫자의 곱 중 최대값
아래와 같은 20×20 격자가 있습니다. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFDVJq%2FbtqEpIlSyb8%2F5ziNBychyFDGKmElYn4bX0%2Fimg.gif)
(C언어)프로젝트 오일러(Project Euler)10. 이백만 이하 소수의 합
문제 10 이하의 소수를 모두 더하면 2 + 3 + 5 + 7 = 17 이 됩니다. 이백만(2,000,000) 이하 소수의 합은 얼마입니까? 코드 #include #include #include #define NUM 2000000 int main(void) { int i, j; int* prime= (int*)malloc(sizeof(int) * NUM); //배열 동적할당 long long sum = 0; for (i = 2; i
(C언어)프로젝트 오일러(Project Euler)9. a + b + c = 1000 이 되는 피타고라스 수
문제 세 자연수 a, b, c 가 피타고라스 정리 a2+b2=c2를 만족하면 피타고라스 수라고 부릅니다 (여기서 a<b<c ). 예를 들면 32+42=9+16=25=52이므로 3, 4, 5는 피타고라스 수입니다. a+b+c=1000 인 피타고라스 수 a, b, c는 한 가지 뿐입니다. 이 때, a×b×c 는 얼마입니까? 코드 #include int main(void) { int i, j, k; for (i = 1; i < 1000; i++) { for (j = 2; j < 1000; j++) { if (i < j) { k = 1000 - i - j; if (i * i + j * j..