🧩 Programming Languages/Python CodingTest 29

백준 2023번(gold 5) : 신기한 소수 - DFS

https://www.acmicpc.net/problem/2023 문제 : 왼쪽부터 1자리, 2자리, 3자리, 4자리 모두 소수인 수를 찾는 문제z.B. 73317 소수73 소수733 소수7331 소수 1. 입력import syssys.setrecursionlimit(10000)input = sys.stdin.readlinen = int(input()) sys.setrecursionlimit(10000): 파이썬의 재귀 깊이 한도를 10,000으로 설정DFS를 재귀적으로 구현하기 때문에, 깊이 제한을 늘려서 재귀 호출이 깊게 발생할 때도 프로그램이 중단되지 않도록 한다.  2. 소수 구하는 함수def isPrime(num): for i in range(2, int(num / 2 + 1)): if num..

백준 2745번(bronze 2) : 진법 변환

https://www.acmicpc.net/problem/2745 [ 문제 ]B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35  ① nums 라는 변수에 0~9 와 A~Z 값을 저장한다.nums = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 이러면 본인의 값은 인덱스 번호와 동일하기 때문에 답을 도출하는데 수월할 것이다.  ② 입력n, b = input().split()b = int(b)N = len(n)sum = 0  ③ 진법 계산 바로 머릿속에 구현..

백준 2750번(bronze 2) : 수 정렬하기 (2차)

https://www.acmicpc.net/problem/2750 알고리즘 공부는 꾸준히 해야한다는 것을 실감하게 된다.복습 차 이전에 풀었던 문제를 풀려고 한다.  백준 2750번(bronze 2) : 수 정렬하기2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpentwicklerin.tistory.com 정렬 카테고리에 있는 문제이기 때문에 삽입 정렬 혹은 버블 정렬로 풀이해보는 것이 출제의도였을텐데과거의 나는 그냥 파이썬의 편리한 sort 함수를 사용하였다. (반성하자...!)그래서 이번에는 정렬 알고리즘을 활용하여 문제를..

백준 1157번(bronze 1) : 단어 공부

https://www.acmicpc.net/problem/1157 word = input().upper()words = list(set(word))counts= []for i in words: cnt = word.count counts.append(cnt(i))if counts.count(max(counts)) > 1: print("?")else: print(words[(counts.index(max(counts)))]) 1. upper : 대소문자를 구분없이 카운트 하므로 애초에 처음부터 입력받을 때 대문자로 변환한다.2. set : 비교를 위해 중복 없는 리스트 words 를 생성해준다.3. for 문 : 얼마나 중복되었는지 세고 counts 리스트에 추가한다.4. if 문 : 만약 중복된 횟..

백준 9012번(silver 4) : 괄호 (replace)

9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 내가 작성한 코드 (60ms) import sys input = sys.stdin.readline t = int(input()) for _ in range(t): string = input().rstrip() stack = [] for i in range(len(string)): if string[i] == '(': stack.append('(') else: # ')' 입력받았는데 if not len(stack) == 0: # 앞서..

백준 17103번(silver 2) : 골드바흐 파티션 (소수의 합으로 이루어진 수)

17103번: 골드바흐 파티션 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다. www.acmicpc.net 내가 작성한 코드 - 시간초과 import sys import math input = sys.stdin.readline # 소수 판명 def is_primeNum(n): if n == 1: return False for i in range(2, math.trunc(math.sqrt(n))+1): if n % i == 0: return False return True primeNum_list = [] for i in range(2, 500001): if is_prim..

백준 4948번(silver 2) : 베르트랑 공준 (특정 범위 내 소수 개수 구하기)

4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 내가 작성한 코드 - 시간초과 import sys import math input = sys.stdin.readline # 소수 판명하는 함수 정의 def is_primenum(n): for i in range(2, math.trunc(math.sqrt(n)+1)): if n % i == 0: # 소수가 아니면 return False # for 문이 끝났는데도 나누었는데 나머지가 모두 0이 아니었다면 # 소수 return True # n~2n 사이의 소수..

백준 1929번(silver 3) : 소수 구하기

1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 내가 작성한 코드 - 오답 import sys import math input = sys.stdin.readline # 소수 판명하는 함수 정의 def is_primenum(n): for i in range(2, math.trunc(math.sqrt(n)+1)): if n % i == 0: # 소수가 아니면 return False # for 문이 끝났는데도 나누었는데 나머지가 모두 0이 아니었다면 # 소수 return True m, n = map(int, input().split()) # 출력..

백준 4134번(silver 4) : 다음 소수 (소수 판명:에라토스테네스의 체)

4134번: 다음 소수 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. www.acmicpc.net 내가 작성한 코드 - 시간초과 import sys input = sys.stdin.readline n = int(input().rstrip()) prime_nums= [int(input().rstrip()) for _ in range(n)] for i in range(0, n): check = prime_nums[i] for j in range(2, check): if check % j == 0: check += 1 print(check) 새로 알게 된 것 - 에라토스테네스의 체 소수임을 알아내기 위해 2부터 n-1 까지 나눌 필요 없고, 2부..

백준 2485번(silver 4) : 가로수 - 최대공약수

2485번: 가로수 첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가 www.acmicpc.net 내가 작성한 코드 - 메모리 초과 import sys import math input = sys.stdin.readline n = int(input().rstrip()) tree = [int(input().rstrip()) for _ in range(n)] # 심어진 나무들의 간격을 구하기 interval = [] for i in range(0, n-1): interval.append(tree[i+1]-tree[i]) # 간격들의 최대공약수 구하기 gcd..