본문 바로가기

전체 글98

[백준] 10989번 파이썬 (수 정렬하기 3) 메모리 초과 오류가 발생했다. 생각해보면 N이 10,000,000까지 가능하기 때문에 list의 길이가 너무 커져서 메모리 초과 오류가 발생한 것으로 생각된다. # 메모리 초과 발생 import sys input = sys.stdin.readline n = int(input().rstrip()) lst = [] for _ in range(n): num = int(input().rstrip()) lst.append(num) lst.sort() for i in lst: print(i) 따라서 list의 길이를 어떻게 하면 줄일 수 있을까 고민했다. 둘째 줄부터 주어지는 수는 최대가 10,000이므로 이를 list의 길이로 활용하게 되면 메모리 초과 오류를 없앨 수 있겠다고 생각해 코드를 구현했다. impor.. 2024. 2. 24.
[백준] 4949번 파이썬 (균형잡힌 세상) 마지막에 len(stack) != 0이라 no가 출력되는 경우를 예제에서 주지 않아서 조금 헤맸다. 코테에서도 예제에서 주지 않은 오류를 잡아야 하는 경우가 많으니까 습관 들여놓자. import sys input = sys.stdin.readline while True: sen = input().rstrip() stack = [] temp = False if (sen == '.'): break for s in sen: if (s == '(' or s == '['): stack.append(s) elif s == ')': if (len(stack) != 0 and stack[-1] == '('): stack.pop() else: temp = True break elif s == ']': if (len(st.. 2024. 2. 23.
[백준] 2231번 파이썬 (분해합) 분해합을 효율적인 코드로 구해내는 방법과 입력값이 적은 경우에는 sys.stdin.readline을 쓰면 비효율적이라는 점을 배웠다. n = int(input()) for i in range(1, n+1): cal = i cal += sum(map(int, str(i))) if (cal == n): print(i) break if (i == n): print(0) break 2024. 2. 23.
[백준] 1966번 파이썬 (프린터 큐) 1. 문제와 예제 2. 전체 코드 from collections import deque import sys input = sys.stdin.readline # 입력 받기 T = int(input().rstrip()) # 테스트케이스 수 for _ in range(T): N, M = map(int, input().split()) # 문서 개수, 궁금한 문서가 몇 번째에 놓여 있는지 deq = deque(list(map(int, input().split()))) # 큐 res = 0 # 문서가 몇 번쨰로 인쇄되는지 while deq: max_num = max(deq) front = deq.popleft() M -= 1 if (max_num == front): res += 1 if M < 0: print(re.. 2024. 2. 23.
[백준] 11866번 파이썬 (요세푸스 문제 0) 문제에서 준 예시를 정리해봤더니 규칙을 찾을 수 있었다. 규칙을 바탕으로 코드를 작성했다. import sys input = sys.stdin.readline n, k = map(int, input().split()) lst = [(i+1) for i in range(n)] res_lst = [] i = k-1 while True: res_lst.append(str(lst.pop(i))) i += (k-1) # print(lst) if (len(lst) == 0): break while (i >= len(lst) and i != 0): i -= len(lst) print('') 중간에 lst를 계속 출력해보면서 과정이 맞게 진행되고 있는지까지 확인했다. 2024. 2. 22.
[백준] 9012번 파이썬 (괄호) 규칙을 정리해보면 아래와 같다. 이를 코드로 구현해서 완성하였다. import sys input = sys.stdin.readline n = int(input().rstrip()) for _ in range(n): ps = list(input().rstrip()) i = 1 while (i != len(ps) and len(ps) != 0): if (ps[0] == ')'): break if (ps[i] == ')'): ps.pop(i) ps.pop(i-1) i = 1 else: i += 1 if (len(ps) == 0): print("YES") else: print("NO") 2024. 2. 22.
[백준] 2609번 파이썬 (최대공약수와 최소공배수) 최대공약수와 최소공배수를 구하는 방법은 대표적으로 유클리드 호제법이 있다. 이는 수학적으로도 유용하니 기억해두자. import sys input = sys.stdin.readline a, b = map(int, input().split()) def GCD(x, y): if y > x: x, y = y, x while (y): x, y = y, x%y return x def LCM(x, y): res = (x*y)//GCD(x, y) return res print(GCD(a, b)) print(LCM(a, b)) 2024. 2. 19.
[백준] 2164번 파이썬 (카드2) 정직하게 문제에서 알려준 것을 list로 구현하는 코드를 작성했더니 시간 초과 오류가 발생했다. import sys input = sys.stdin.readline n = int(input().rstrip()) lst = [(i+1) for i in range(n)] l = len(lst) for _ in range(2, l): lst.remove(lst[0]) num = lst[0] lst.remove(num) lst.append(num) lst.remove(lst[0]) print(lst[0]) 이후 뭔가 특별한 규칙이 있음을 유추할 수 있었고 고민해보다가 코드를 작성했다. # n = 1 -> output = 1 = (1-0) # n = 2 -> output = 2 = (2-1)*2 # n = 3 -.. 2024. 2. 19.