목록Python (288)
홍우진의 개발새발
문제 링크https://www.acmicpc.net/problem/1935풀이 코드n = int(input())expression = input()nums = [int(input()) for _ in range(n)]stack = []for char in expression: # 문자가 알파벳이면 해당하는 숫자를 스택에 추가 if char.isalpha(): # A는 0번째, B는 1번째 숫자 stack.append(nums[ord(char) - ord('A')]) # 연산자이면 스택에서 두 숫자를 꺼내 계산 else: num2 = stack.pop() num1 = stack.pop() if char == '+': ..
문제 링크https://www.acmicpc.net/problem/15651풀이 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())result = []def backtrack(): # 수열의 길이가 M에 도달하면 출력하고 종료 if len(result) == m: print(' '.join(map(str, result))) return # 1부터 N까지의 숫자를 반복 for i in range(1, n + 1): result.append(i) # 현재 숫자를 수열에 추가 backtrack() # 다음 숫자를 선택하기 위해 재귀 호출 result.pop() # 재귀 호출이 끝나..
문제 링크https://www.acmicpc.net/problem/9020풀이 코드import sysinput = sys.stdin.readline# 10000까지의 소수를 미리 한 번에 구해놓기prime = [True] * 10001prime[0] = prime[1] = False # 0과 1은 소수가 아님for i in range(2, int(10001**0.5) + 1): if prime[i]: # i의 배수들을 소수에서 제외 for j in range(i * 2, 10001, i): prime[j] = Falsefor _ in range(int(input())): # 가운데부터 1씩 줄여가며 소수 쌍을 찾음 n = int(input()..
문제 링크https://www.acmicpc.net/problem/1697풀이 코드from collections import dequen, m = map(int, input().split())# 각 위치까지 걸리는 시간을 기록할 리스트time = [-1] * 100001def bfs(start_x): queue = deque([start_x]) # 시작 위치의 시간은 0으로 설정하고 방문 처리 time[start_x] = 0 while queue: x = queue.popleft() # 현재 위치가 동생의 위치와 같다면 바로 시간 반환 if x == m: return time[x] # 이동할 수 있는 세 가지 경우..
문제 링크https://www.acmicpc.net/problem/11286풀이 코드import heapqimport sysinput = sys.stdin.readline# 연산의 개수 N 입력n = int(input())# 힙으로 사용할 리스트 선언heap = []for _ in range(n): # 정수 x 입력 x = int(input()) if x != 0: # x가 0이 아니면 (절댓값, 원본값)을 힙에 추가 heapq.heappush(heap, (abs(x), x)) else: # x가 0이면 if heap: # 힙이 비어있지 않으면 가장 작은 원소를 꺼내서 원본값 출력 print(h..
문제 링크https://www.acmicpc.net/problem/1927풀이 코드import heapqimport sysinput = sys.stdin.readline# 힙으로 사용할 리스트 선언min_heap = []# 연산의 개수 N 입력n = int(input())for _ in range(n): # 연산 정보 x 입력 x = int(input()) if x == 0: # 힙이 비어있는 경우 0을 출력 if not min_heap: print(0) # 힙이 비어있지 않은 경우 가장 작은 원소를 출력하고 제거 else: print(heapq.heappop(min_heap)) else: ..
문제 링크https://www.acmicpc.net/problem/33557풀이 코드import sysinput = sys.stdin.readlinefor _ in range(int(input())): A, B = input().rstrip().split() x = int(A) * int(B) if len(A) 코드 해석문제 제목이 재미있어서 골랐다.길이가 짧은 쪽의 수를 곱할 때 앞부분을 1로 채운 뒤 곱하는것이 핵심 로직이다.rjust 함수를 사용하면 간단하다. 체감 난이도: ★★☆☆☆
문제 링크https://www.acmicpc.net/problem/12782풀이 코드import sysinput = sys.stdin.readlinefor _ in range(int(input())): n, m = input().split() otz = 0 zto = 0 for i in range(len(n)): if n[i] != m[i]: if n[i] == '1': otz += 1 else: zto += 1 print(max(otz, zto))코드 해석그리디 알고리즘을 사용했다.핵심은 최대한 교환 연산을 활용하는 것이다.교환 ..