Python 202

[Python] 21919. 소수 최소 공배수

# 소수인지 판별하는 함수 def is_pn(n): for i in range(2, n): if i * i > n: # 이 뒤는 볼 필요도 없어 break if n % i == 0: # 소수가 아니라면 ? False 반환 return False return True n = int(input()) # 수열의 길이 numbers = set(map(int, input().split())) # 입력받는 수열 answer = 1 for n in numbers: if is_pn(n): answer *= n if answer == 1: # 소수 없어 print(-1) else: print(answer) * 수열 리스트를 입력받을 때, 중복인 수들이 올 수 있기 때문에 set() 쓰면 된다.

Algorithm/Baekjoon 2021.09.14

[Python] 4873. 반복 문자 지우기

t = int(input()) for idx in range(1, t+1): s = input() answer = [] # 스택 이용할 리스트 for word in s: # word == 지금 answer에 추가할까 말까 고민하는 문자 # answer에 문자가 들어있고, 마지막 문자가 지금 붙이려는 문자와 같다면 중복이므로 pop으로 제거 if answer and answer[-1] == word: answer.pop() # answer가 비어있거나, 중복되지 않는 문자라면 추가 else: answer.append(word) print('#{} {}'.format(idx, len(answer)))

[Python] 4871. 그래프 경로

Stack 활용하여 푼 코드 t = int(input()) for idx in range(1, t+1): # 노드 개수 v, 간선개수 e v, e = map(int, input().split()) # 인접행렬 만들기 (인덱스 사용 편하게 하기 위해 range(v+1) 해주었음) arr = [[0 for _ in range(v+1)] for _ in range(v+1)] # 인접행렬에 방향성 표시하기 for _ in range(e): # 출발노드 d, 도착 노드 a d, a = map(int, input().split()) arr[d][a] = 1 # 한방향이므로 반대로도 설정해주면 (arr[a][d] == 1) 안됨 # 경로 존재 확인할 출발 노드 s, 도착 노드 g s, g = map(int, inpu..

[Python] 4869. 종이 붙이기

재귀 방식으로만 푼 코드 # 규칙 (입력 받은 숫자 n) # n-20 * 2 + n - 10 # 맨 처음, 즉 n = 10일때부터 구해나가서, 입력받은 숫자 n까지 도달할때까지 구한다. def paper_use(n): if n == 10: return 1 elif n == 20: return 3 else: return 2 * paper_use(n-20) + paper_use(n-10) t = int(input()) for t in range(1, t+1): n = int(input()) print('#{} {}'.format(t, paper_use(n))) DP 코드 (점화식 이용) # 점화식을 이용하기 위해 n의 크기마다 경우의 수를 저장할 리스트 만들기 # 규칙이 (현재의 수-2) * 2 + (현재의..

[Python] 4866. 괄호 검사

# 괄호의 짝을 찾기 위해 딕셔너리 활용 b_dict = {'(':')', '{':'}', '[':']'} t = int(input()) for idx in range(1, t+1): code = input() stack = [] answer = 0 for c in code: # c가 여는 괄호 중 하나라면 stack에 추가 if c in b_dict.keys(): stack.append(c) # c가 닫는 괄호 중 하나라면 elif c in b_dict.values(): # stack이 비어있지 않다면 stack에서 괄호 빼오기 try: pop_b = stack.pop() # 만약 pop한 여는 괄호가 c(현재 닫는 괄호)와 짝이 아니라면 아예 답이 틀린거 -> 중단 if b_dict[pop_b] !=..

[Python] 1219. 길찾기

def dfs(s): global answer visited[s] = 1 # 현재 노드 방문 처리 for i in arr[s]: if i == 99: # 목표 노드 99까지 도달했으면 answer = 1 answer = 1 if answer: # 이미 목표 노드 도달했으면 재귀 들어가지마 return if not visited[i]: # 목표노드 가는 중이고, 방문한 곳 아니라면 재귀 dfs(i) for idx in range(1, 11): # 테스트 케이스 순서 idx, 순서쌍의 개수 n idx, n = map(int, input().split()) # 순서쌍 리스트 pair_list = list(map(int, input().split())) arr = [[] for _ in range(100)] #..

[Python] 2005. 파스칼의 삼각형

tc = int(input()) for idx in range(1, tc+1): n = int(input()) # 파스칼 삼각형의 크기 temp = [1] # 첫번째 줄 # 2차원 리스트로 만들지 않고 바로바로 프린트 해주기 위해 # 테스트케이스의 번호와 첫번째 줄을 먼저 프린트해준다. print('#{}'.format(idx)) print(*temp) # 두번째 줄부터 시작하기 때문에 삼각형 크기-1(n-1)까지 반복 for i in range(n-1): stack = [0] + temp + [0] # 맨 처음과 끝에 있는 1은 더할게 없으니 현재의 위 라인의 양 끝에 0을 붙여준다. temp = [] # 해당 라인의 숫자를 저장할 임시 리스트 # 여기서 pop()은 맨 마지막 원소를 뽑는다. # 파스..

[Python] 4864. 문자열비교

in 을 이용한 간단한 풀이 코드 tc = int(input()) for idx in range(1, tc+1): str1 = input() str2 = input() str1_l = len(str1) answer = 0 if str1 in str2: answer = 1 print('#{} {}'.format(idx, answer)) 보이어무어 알고리즘을 이용하여 푼 코드 tc = int(input()) for idx in range(1, tc+1): str1 = input() str2 = input() str1_l = len(str1) answer = 0 # 건너뛸 리스트 만들기 str_skip = {str1[i]:str1_l - i -1 for i in range(str1_l)} print(str_s..