프로그래밍
(파이썬)프로젝트 오일러(Project Euler)17.1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는?
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 글자가 됩니다. 사전 작업 one부터 onethound까지 일일이 입력할 수는 없다. 누군가는 입력해놓지 않았을까 하고 구글에 '1 to 1000 in english..
(파이썬)백준 10996.별 찍기 - 21
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. n = int(input()) if n % 2 != 0: #홀수인 경우 for i in range(n): print("* "* (n // 2 + 1)) print(" *"* (n // 2) ) if n % 2 == 0: #짝수인 경우 for i in range(n): print("* "* (n // 2)) print(" *"* (n // 2)) n이 홀수일 때는 첫 줄에 (별, 공백)을 n // 2 + 1 개, 둘째 줄에 (공백, 별) n // 2개 출력한다. 이 패턴을 n회 반복한다. n이 3이라면 * * * 이 패턴이 3회 반복되고, n이 5라면 * * * * * 이 패턴이 5회 반복된다. 짝수일 때는 (별, 공백), (공백, 별)을 n // 2 만..
(파이썬)백준 2446. 별 찍기 - 9
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. n = int(input()) k = 0 for i in range(2 * n - 1, 0, -2): for j in range(k): print(" ", end = '') k += 1 for j in range(i , 0, -1): print("*", end = '') print("") k -= 2 for i in range(3, 2 * n, 2): for j in range(k): print(" ", end = '') k -= 1 for j in range(i): print("*", end = '') print("") 별 개수를 줄여나가려면 range를 역순으로 만들어야겠다고 생각했다. 그러니 n이나 i로는 공백을 찍기가 곤란해서 k라는 문자를 더 ..
(파이썬)백준 4673.셀프 넘버
문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... n을 d(n)의 생성자라..
(C언어, 파이썬)프로젝트 오일러(Project Euler)16.2^1000의 각 자리수를 모두 더하면?
215 = 32768 의 각 자리수를 더하면 3 + 2 + 7 + 6 + 8 = 26 입니다. 21000의 각 자리수를 모두 더하면 얼마입니까? 1. 파이썬 a = str(2**1000) sum = 0 for i in range(len(a)): sum += int(a[i]) print(sum) 파이썬으로 구현하면 정말 쉬워진다. 21000을 문자열 형태로 저장하고, 문자열의 길이만큼 인덱스를 정수형태로 변환해 더하면 끝난다. 2. C언어 #define SIZE 400 #include int main(void) { int num[SIZE] = { 0 }; num[SIZE - 1] = 1; int i, j, sum = 0; for (i = 1; i = 10) { num[j - 1] = num[j - 1] +..
(파이썬)프로젝트 오일러(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") 고등학교 확통 단골 문제다. 첫 번째 방법은 모서리마다 숫자를 적고 목적지에 도착할때까지 더해가며 구하는 방법이다. 두 번째 방법은 순열을 이용하는 방법이다. 정직하게 격자 배열을 이동하는 문제이므로 순열을 이용하기로 했..
(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까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?참고: 계산 과정 도중에는 숫자가..
(파이썬)프로젝트 오일러(Project Euler)13.50자리 숫자 100개를 더한 값의 첫 10자리 구하기
아래에 50자리 숫자가 100개 있습니다. 이것을 모두 더한 값의 첫 10자리는 얼마입니까? 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 23067588207539346171171980310421047513778063246676 89261670696623633820136378418383684178734361726757 2811287981284997940806548193159262169127..