본문 바로가기

Algorithm 문제 풀이

[python] keyError 예외 처리하기 문제 발생 https://school.programmers.co.kr/tryouts/85912/challenges 위의 문제를 풀던 중 id_pw: ["rabbit04", "98761"] db: {'rardss': '123', 'yyoom': '1234', 'meosseugi': '1234'} 이와 같은 입력 값을 넣게 되었을 경우, 딕셔너리에서 해당하는 key 값을 찾지 못해((없는 key 값에 접근하려고 할 때) 발생하는 keyError가 발생하였다. 하지만 이 문제에서 해당하는 key 값을 찾지 못하였을 경우(즉 해당 id가 db에 없는 경우), fail이라는 메시지를 리턴해야한다. 그러기 위해서는 해당 에러를 예외 처리를 해야한다. 문제 해결 keyError가 발생하였을 때 예외 처리는 어떻게 해.. 더보기
[python] 백준 1182번 부분수열의 합 https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 💻 코드 import sys from itertools import combinations input = sys.stdin.readline n, s = map(int, input().split()) number = list(map(int, input().split())) count = 0 for i in range(1, n + 1): result = list(c.. 더보기
[python] 백준 14501번 퇴사 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 💻 코드 import sys input = sys.stdin.readline n = int(input()) t_list = [] p_list = [] dp = [0] * (n + 1) for _ in range(n): t, p = map(int, input().split()) t_list.append(t) p_list.append(p) for i in range(n - 1, - 1, -1): if t_list[i] + i > n: dp[i] = dp[i + 1] else: dp[i] = max(p_list[i] + dp[i + t_l.. 더보기
[python] 백준 10973번 이전 순열 https://www.acmicpc.net/problem/10973 10973번: 이전 순열 첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 💻 코드 n = int(input()) array = list(map(int, input().split())) for i in range(n - 1, 0, -1): if array[i - 1] > array[i]: for j in range(n - 1, 0, -1): if array[i - 1] > array[j]: array[i - 1], array[j] = array[j], array[i - 1] array = array[:i] + list(reve.. 더보기
[python] 백준 10866번 덱 https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 💻 코드 import sys from collections import deque input = sys.stdin.readline n = int(input()) deque_list = deque() for i in range(n): tmp = input().rstrip().split() if len(tmp) == 1: command = tmp[0] if command == 'pop.. 더보기
[python] 백준 1991번 트리 순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 💻 코드 import sys input = sys.stdin.readline class Node: # 노드 생성 def __init__(self, data, left_node, right_node): self.data = data self.left_node = left_node self.right_node = right_node def preorder(node): # 전위 순회 VLR .. 더보기
[python] 백준 1697번 숨바꼭질 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 💻 코드 from collections import deque def bfs(): queue = deque() queue.append(n) while queue: x = queue.popleft() # 시작점 if x == k: print(visited[x]) break for i in (x - 1, x + 1, x * 2): if 0 시작점 5 != 17이므로 if문은.. 더보기
[python] 백준 11723번 집합 https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 💻 코드 import sys m = int(input()) s = set() for _ in range(m): tmp = sys.stdin.readline().rstrip().split() # command만 있을 경우 if len(tmp) == 1: if tmp[0] == 'all': s = set([i for i in range(1, 21)]) else: s = set() # command와 x가 존재할 때 else: comma.. 더보기