본문 바로가기

매일매일 (Everyday)

(33)
[BOJ] 백트래킹 - N과 M (1) 문제 - Python # 15649: N과 M (1) n, m = map(int, input().split()) def bt(n, m) : depth = 0 result = [] if depth == m : return " ".join(map(str, result)) nums = [i for i in range(1, n+1)] for i in range(len(nums)) : result.append(nums[i]) 지금껏 백준 풀면서 처음 답을 찾아보고 알고리즘 이해에 힘쓴 문제입니다. ## 처음 답을 찾아서 코드 아이디어를 이해해보았다. n, m = map(int, input().split()) check_list = [False] * n output = [] def BT(depth, n, m) : if depth == ..
[BOJ] 정렬 - 값 / 좌표압축 문제 - Python 188770: 좌표 압축 # 18870: 좌표 압축 import sys n = int(sys.stdin.readline()) nums = list(map(int, sys.stdin.readline().split())) sort_nums = sorted(nums) for n in nums : print(sort_nums.index(n), end = ' ') ## 두번째 테스트 케이스, 같은 값에 대해선 생각 못하네 그럼 set() 으로 접근해보자. import sys n = int(sys.stdin.readline()) nums = list(map(int, sys.stdin.readline().split())) nums_2 = set(nums) nums_3 = list(nums_2) sort_nums = ..
[BOJ] - 브루트 포스 - (1) - Python 2798: 블랙잭 # 2798: 블랙잭 # 내풀이 from itertools import combinations import sys n , m = map(int, sys.stdin.readline().split()) cards = list(map(int, sys.stdin.readline().split())) sums = list(map(sum, combinations(cards, 3))) result = [] for i in sums : if i m): continue else: ans = max(ans, cards[i] + cards[j] + cards[k]) print(ans) ####################################################################..
내가 못풀었던 문제 리스트, 앞으로 계획 기본 수학 1 1011번 Fly me to the Alpha Centauri 기본 수학 2 1002번 터렛 재귀 별 찍기 - 10 재귀 하노이 탑 이동 순서 백트래킹, 해결 (복습할 문제) n과 m (1) DP, 해결 (복습할 문제) LIS 첫번째 문제 2021 - 12 - 18 2차 시험 본 뒤 할일 1. 블로그 글 가독성 높이기 2. 다시 작성해야할 글 확인해서 리스트로 뽑고 하나씩 다시 진행 3. 하루정도 쉬고오기.. 4.
[BOJ] - 기본 수학 2 - (2) - Python 11653: 소인수분해 # 11653: 소인수분해 # def prime_list(n): sieve = [True] * n m = int(n ** 0.5) for i in range(2, m + 1): if sieve[i] == True: for j in range(i+i, n, i): sieve[j] = False return [i for i in range(2, n) if sieve[i] == True] import sys N = int(sys.stdin.readline()) prime = prime_list(N) j = 0 while True : if N in prime : print(N) break elif N % prime[j] == 0 : print(prime[j]) N = N // prime[..
[BOJ] - 기본 수학 2 - 소수 - (1) - Python 소수(Prime number)는 1과 자신의 숫자 이외에 나눠질 수 없는 숫자를 말합니다. 소수를 찾는 함수를 만드는 방법에는 두 가지가 있었습니다. (제가 풀었던 방법 내에서 말씀드립니다.) - 소수가 n이면 2부터 n-1까지 나눠서 한번이라도 나누어떨어지면 소수가 아님을 반환 - 소수가 n이면 2부터 sqrt(n) 전까지 나눠서 한번이라도 나누어떨어지면 소수가 아님을 반환 첫번째 방법은 O(n) 시간만큼 걸리고 두번째 방법은 O(n^0.5) 시간만큼 걸린다고 합니다. 당연히 덜 나누는게 더 빠르겠죠? 두번째 방법은 에라토스테네스 체 알고리즘 내용입니다. 8의 경우 약수는 1, 2, 4, 8 이므로 sqrt(8) = 약 2.8로 1, 2 까지만 나눠도 됩니다. 4와 8은 이미 2에서 나눴으니까요. 이렇..
[BOJ] - 기본 수학 1 - (3) - Python 2775: 부녀회장이 될테야 def CountResident(k, n): if k == 0: count = n return count if n == 1: count = 1 return count else: count = CountResident(k, n - 1) + CountResident(k - 1, n) return count T = int(input()) for _ in range(T): k = int(input()) n = int(input()) print(CountResident(k, n)) 이 문제 풀려고 어제 재귀 함수를 공부했는데요. python3 환경에서 돌리니까 시간초과가 나왔습니다. 그래서 pypy에서 돌렸는데 정답 처리가 되었습니다. 근데 좀 찝찝하네요... 수학적으로 푸는 방법을 ..
[BOJ] - 재귀 - (1) - Python 10872: 팩토리얼 # for문 풀이 N = int(input()) result = 1 for i in range(1, N+1): result *= i print(result) # 재귀 풀이 import sys sys.setrecursionlimit(10**8) def facto(n) : if n == 0 : return 1 elif n == 1 : return 1 else : return n * facto(n-1) print(facto(int(input()))) 런타임 에러 (RecursionError) 관련 정보 (출처 : 백준 홈페이지) 런타임 에러 언어: C99, C11, C90, C2x, C++98, C++11, C++14, C++17, C++20 런타임 에러 이유설명AssertionFaile..