코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정) 48

[math3/Python] 1002번: 터렛 - 효과는 굉장했다!

1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 알고리즘 분류 수학 기하학 SOLUTION import sys T = int(sys.stdin.readline()) for _ in range(T): x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split()) distance = ((x1-x2)**2 + (y1-y2)**2) ** (1/2) if distance == 0 and r1 == r2: # 두 원이 일치할 때 print(-1) elif distance == r1+r2 or distance == abs(..

[math3/Python] 9020번: 골드바흐의 추측 - 효과는 굉장했다!

9020번: 골드바흐의 추측 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아 www.acmicpc.net 알고리즘 분류 수학 정수론 소수 판정 에라토스테네스의 체 SOLUTION import sys sosu = [0 for i in range(10001)] sosu[1] = 1 # 0 = 소수, 1 = 소수가 아닌 수 for i in range(2,101): # 제곱근까지만 탐색하면 되므로 10001 의 제곱근인 100 까지 for j in range(i+i, 10001, i): # i의 배수들은 전부 소수가 아니므로 제외시킴 sosu[j] = ..

[math2/Python] 1011번: Fly me to the Alpha Centaur - 효과는 굉장했다!

1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행 www.acmicpc.net 알고리즘 분류 수학 SOLUTION import sys from math import sqrt T = int(sys.stdin.readline()) for _ in range(T): x, y = map(int, sys.stdin.readline().split()) cnt = 0 distance = y - x diff = int(sqrt(distance)) # distance가 1,2,3 일 때 규칙에서 예외이므로 그대..

[math2/Python] 1929번: 소수 구하기 - 효과는 굉장했다!

1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 알고리즘 분류 수학 정수론 소수 판정 에라토스테네스의 체 SOLUTION import sys import math M, N = map(int, sys.stdin.readline().split()) visited = [False] * (N+1) visited[0] = True visited[1] = True for i in range(2, int(math.sqrt(N))+1): # 시간단축을 위해 num의 제곱근까지만 탐색한다 if not visited[i]: for j in range(i*2,..

[math1/Python] 2839번: 설탕 배달 - 효과는 굉장했다!

2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 알고리즘 분류 수학 다이나믹 프로그래밍 그리디 알고리즘 SOLUTION import sys N = int(sys.stdin.readline()) ans = 0 while True: if N % 5 == 0: # 5로 나누어 떨어질때가 최소 ans += N // 5 print(ans) break if N < 0: # 정확하게 N킬로 그램으로 만들어지지 않을 시 print(-1) break N -= 3 # 5로 나누어 떨어지지 않는다면 3kg 봉지를 하나 만든 뒤 cnt +=..

[math1/Python] 2869번: 달팽이는 올라가고 싶다 - 효과는 굉장했다!

2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 알고리즘 분류 수학 SOLUTION import sys A, B, V = map(int, sys.stdin.readline().split()) # 미끄러지는 높이를 뺀 후 막대 나무 높이를 올라가는 높이로 나누어 걸리는 일 수를 구함 total_day = (V-B) / (A-B) # 만약 (V-B) 가 (A-B)로 딱 나눠떨어지지 않는다면 하루 더 간 것이니 +1 if int(total_day) != total_day: print(int(total_day)+1) else: print(int(total_day))

[문자열/Python] 1152번: 단어의 개수 - 효과는 굉장했다!

1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 알고리즘 분류 구현 문자열 SOLUTION import sys sentence = list(sys.stdin.readline().split()) print(len(sentence))

[문자열/Python] 1157번: 단어 공부 - 효과는 굉장했다!

1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 알고리즘 분류 구현 문자열 SOLUTION import sys word = sys.stdin.readline().rstrip().upper() # upper() 함수를 통해 대문자로 만들어줌 set_word = list(set(word)) # set() 함수를 통해 중복된 값들 제거 cnt = [] for alphabet in set_word: cnt.append(word.count(alphabet)) if cnt.count(max(cnt)) > 1: # 가장 많이 사용된 알파벳이 여러개 일 때..

[함수/Python] 1065번: 한수 - 효과는 굉장했다!

1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 알고리즘 분류 브루트포스 알고리즘 SOLUTION import sys def diff(N): cnt = 0 for num in range(1,N+1): if num < 100: cnt += 1 else: nums = list(map(int, str(num))) if nums[0] - nums[1] == nums[1] - nums[2]: cnt += 1 return cnt N = int(sys.stdin.readline()) print(diff(N))

[함수/Python] 4673번: 셀프 넘버 - 효과는 굉장했다!

4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 알고리즘 분류 수학 구현 부르트포스 알고리즘 SOLUTION import sys def self_num(N): for j in str(N): N += int(j) N_list.append(N) N_list = [] for i in range(1,10001): self_num(i) if i not in N_list: print(i)