콘텐츠로 건너뛰기
Home » 스터디 » Project Euler » Page 4

Project Euler

오일러 프로젝트의 문제 풀이. 주로 파이썬과 Swift로 풀이합니다. (Python 3.6, Swift 4.0)

오일러 프로젝트 54

포커라는 카드 게임은 다섯 장으로 된 패의 높고 낮음에 따라 승부를 냅니다. (포커 규칙을 이미 아는 분이라면 규칙 설명 부분은 건너 뛰셔도 좋습니다.) 카드 한 장은 아래와 같은 순서대로 값이 높아집니다.

2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A

다섯장으로 이루어진 패의 계급은 낮은 것부터 높은 순서로 다음과 같습니다.

  • High Card : 가장 높은 카드의 값 비교
  • One Pair : 한 쌍이 같은 카드
  • Two Pairs: 서로 다른 두 쌍이 같은 카드
  • Three of a Kind: 세 장이 같은 카드
  • Straight : 모든 카드가 연속된 숫자 (Q, K, A, 2, 3 은 스트레이트가 아닙니다)
  • Flush : 모든 카드의 무늬가 같음
  • Full House : 세장이 같고, 또 한쌍이 같음
  • Four of a Kind : 네 장이 같은 카드
  • Royal Flush : 10, J, Q, K, A 가 무늬도 같음 (Royal Straight Flush가 아니냐고 하겠지만, Royal Straight라는 것은 없습니다.)

두 사람의 패가 같은 종류의 계급이라면, 계급을 구성하는 카드 중 높은 쪽을 쥔 사람이 이깁니다. 예를 들면 8 원페어는 5 원페어를 이깁니다. (풀하우스의 경우 Three of a Kind의 숫자를 먼저 비교하고, 원 페어의 숫자를 다시 비교) 계급을 이루는 카드 숫자까지 같으면 (둘 다 Q 원페어인 경우 등) 다른 카드를 높은 순서대로 비교해서 승부를 정합니다.

텍스트 파일 poker.txt에는 두 선수가 벌인 1,000회의 승부가 저장되어 있습니다. 한 줄에는 10장의 카드가 공백으로 분리되어 있는데, 앞의 다섯장은 1번 선수의 것이고 뒤의 다섯장은 2번 선수의 패입니다. 잘못되거나 중복된 데이터는 없으며, 무승부도 없습니다.

카드 숫자는 2, 3, …, 9, T, J, Q, K, A 로(숫자 10은 T로 표시), 무늬는 C, D, H, S로 표시되어 있습니다. 예를 들면 3C 3D 3S 9S 9D의 경우 3 풀하우스가 됩니다.

이 데이터를 분석하고 1번 선수가 이긴 횟수를 구하세요.

https://euler.synap.co.kr?problem=54
더 보기 »오일러 프로젝트 54

오일러 프로젝트 53

1, 2, 3, 4, 5 다섯 숫자 중에서 세 개를 고르는 것에는 다음과 같은 10가지 경우가 있습니다.

>> 123, 124, 125, 134, 135, 145, 234, 235, 345

조합론이라는 분야에서는 이것을 5C3 = 10 이라고 표현하며, 일반적인 식은 아래와 같습니다.

\binom{n}{r} =\frac{n!}{r!(n-r)!}

이 값은 n=23에 이르러 23C10 = 1144066으로 처음으로 백만을 넘기게 됩니다. 그렇다면 1 ≦ n ≦ 100 일 때 nCr의 값이 1백만을 넘는 경우는 모두 몇 번입니까?

http://euler.synap.co.kr/prob_detail.php?id=53
더 보기 »오일러 프로젝트 53

프로젝트 오일러 51

두자리 숫자 ▯3 의 첫번째 자리를 여러가지로 바꿨을 때 가능한 아홉가지의 결과 중에서 13, 23, 43, 53, 73, 83의 여섯개는 소수입니다. 56▯▯3의 세 번째와 4번째 자리를 동일한 숫자로 바꿔서 만들어지는 10개의 다섯자리 숫자 중에는 아래에서 보듯이 7개가 소수가 되며, 이것은 이런 식으로 7개의 소수가 만들어지는 첫번째 경우입니다. 이 소수 집단의 첫번째 수인 56003은 이런 성질을 갖는 가장 작은 소수입니다.

56003, 56113, 56333, 56443, 56663, 56773, 56993

위의 예처럼 원래의 일부를 동일한 숫자로 치환했을 때 8개의 소수 집단이 만들어지는 경우를 찾고, 그 집단에 속한 가장 작은 소수를 구하세요. 치환하는 자리는 인접하지 않아도 되고, 가장 앞부분을 치환하는 경우에는 거기에 0은 올 수 없습니다.

http://euler.synap.co.kr/prob_detail.php?id=50
더 보기 »프로젝트 오일러 51

오일러 프로젝트 50

41은 소수이면서 다음과 같은 6개의 연속된 소수의 합으로도 나타낼 수 있습니다.

41 = 2 + 3 + 5 + 7 + 11 + 13

이것은 100 이하에서는 가장 길게 연속된 소수의 합으로 이루어진 소수입니다. 1000 이하에서는 953이 연속된 소수 21개의 합으로 가장 깁니다. 1백만 이하에서는 어떤 소수가 가장 길게 연속되는 소수의 합으로 표현될 수 있습니까?

http://euler.synap.co.kr/prob_detail.php?id=50
더 보기 »오일러 프로젝트 50

오일러 프로젝트 49

1487, 4817, 8147은 3330씩 늘어나는 등차수열입니다. 이 수열에는 특이한 점이 두 가지 있습니다. 세 수는 모두 소수입니다. 세 수는 각각 다른 수의 자릿수를 바꿔서 만들 수 있는 순열(permutation)입니다. 1자리, 2자리, 3자리의 소수 중에서는 위와 같은 성질을 갖는 수열이 존재하지 않습니다. 하지만 4자리라면 위엣것 말고도 또 다른 수열이 존재합니다. 그 수열의 세 항을 이었을 때 만들어지는 12자리 숫자는 무엇입니까?

http://euler.synap.co.kr/prob_detail.php?id=49
더 보기 »오일러 프로젝트 49

오일러 프로젝트 47

서로 다른 두 개의 소인수를 갖는 수들이 처음으로 두 번 연달아 나오는 경우는 다음과 같습니다.

  • 14 = 2 × 7
  • 15 = 3 × 5

서로 다른 세 개의 소인수를 갖는 수들이 처음으로 세 번 연속되는 경우는 다음과 같습니다.

  • 644 = 2² × 7 × 23
  • 645 = 3 × 5 × 43
  • 646 = 2 × 17 × 19

서로 다른 네 개의 소인수를 갖는 수들이 처음으로 네 번 연속되는 경우를 찾으세요. 그 첫번째 수는 얼마입니까?

https://euler.synap.co.kr/prob_detail.php?id=47
더 보기 »오일러 프로젝트 47

오일러 프로젝트 46

크리스티안 골드바흐는 모든 홀수인 합성수를 (소수 + 2×제곱수)로 나타낼 수 있다고 주장했습니다.

  • 9 = 7 + 2×12
  • 15 = 7 + 2×22
  • 21 = 3 + 2×32
  • 25 = 7 + 2×32
  • 27 = 19 + 2×22
  • 33 = 31 + 2×12

이 추측은 잘못되었음이 밝혀졌습니다. 위와 같은 방법으로 나타낼 수 없는 가장 작은 홀수 합성수는 얼마입니까?

http://euler.synap.co.kr/prob_detail.php?id=46
더 보기 »오일러 프로젝트 46

오일러 프로젝트 45

삼각수, 오각수, 육각수는 각각 아래 식으로 구할 수 있습니다.

  • 삼각수 Tn = n × (n + 1) ÷ 2 : 1, 3, 6, 10, 15, …
  • 오각수 Pn = n × (3n – 1) ÷ 2 : 1, 5, 12, 22, 35, …
  • 육각수 Hn = n × (2n – 1) : 1, 6, 15, 28, 45, …

여기서 T285 = P165 = H143 = 40775가 됩니다. 오각수와 육각수도 되는, 그 다음으로 큰 삼각수를 구하세요.

http://euler.synap.co.kr/prob_detail.php?id=45
더 보기 »오일러 프로젝트 45