본문 바로가기
반응형

Study29

백준 1072: 게임(Python) X,Y = map(int,input().split()) Z = (Y * 100)//X Result = 0 left = 0 right = X if Z>=99: print(-1) else: while left 2022. 2. 2.
백준1009: 분산처리(Python) 테스트 케이스에서 지수가 엄청 큰 경우에는 파이썬에서 형식을 초과하기 때문에 규칙성을 찾아서 해결하였다 1 ~ 9까지 제곱한 수들의 일의 자릿수는 규칙성을 갖는다 1) 10으로 나누어지는 데이터들은 10번 컴퓨터가 처리한다 2) 밑이 1 ~ 9 인 경우는 s 배열에 저장된 규칙성으로 컴퓨터 위치를 찾는다 N = int(input()) for i in range(0,N): a,b = map(int,input().split()) s = [[1],[2,4,8,6],[3,9,7,1],[4,6],[5],[6],[7,9,3,1],[8,4,2,6],[9,1]] a %= 10 if a % 10 != 0: c = b % len(s[a-1]) print(s[a-1][c-1]) else: print(10) 2022. 1. 10.
분할 정복[Divide and Conquer] 정리 분할 정복[Divide and Conquer] 문제 -> 부분 문제로 나누어서 각 부분문제를 풀고 그 솔루션을 사용하여 문제를 해결 분할 정복의 3단계 1. Divide : 문제를 부분 문제로 나눈다 2. Conquer: 부분 문제를 푼다 -> 정복한다 3. Combine: 부분 문제들의 솔루션을 합쳐서 기존 문제를 해결 Conquer의 문제가 크면 이 문제도 분할 정복을 여러 번 거쳐 풀 수 있다 ex) 1 ~ n까지 더하기 def consecutive_sum(start, end): if start == end: return start middle = (start+end)//2 return consecutive_sum(start,middle)+consecutive_sum(middle+1,end) 분할 .. 2022. 1. 4.
백준9095: 1, 2, 3 더하기(Python) 1 -> 1 :1개 2-> 1+1, 2 :2개 3-> (1+1+1), (1+2), (2+1), 3 : 4개 4-> (1+1+1+1), (1+1+2), (1+2+1), (2+1+1), (2+2), (1+3), (3+1) : 7개 점화식으로 표현하면 f(n) = f(n-1)+ f(n-2) + f(n-3) , (n>3인 경우) N = int(input()) def Add(i): if i == 1: return 1 if i == 2: return 2 if i == 3: return 4 return Add(i-1)+Add(i-2)+Add(i-3) for i in range(0,N): i = int(input()) print(Add(i)) 2021. 12. 30.
Python 재귀함수(Recursion) 재귀(Recursion): 자기 자신을 호출하는 함수 정수 n부터 1까지 출력하는 함수를 재귀함수로 표현 def countdown(n): if n>0: print(n) countdown(n-1) countdown(10) 10 부터 1까지 출력 대표적인 재귀 함수 예시 팩토리얼(Fatorial) n! = 1 x 2 x... x(n-1) xn 예외 0!은 1 같은 형태의 더 적은 문제를 풀고 그 답을 이용해서 답을 풀어야 한다 n = 0인 경우 n! = 1 n >0인 경우 n! = (n-1)!xn def factorial(n): if n == 0: return 1 return factorial(n-1)*n print(factorial(5)) 결과 (5x4x3x2x1 = 120) 2021. 12. 27.
백준1463: 1로 만들기(Python) ex) 10이라는 수는 10 -> 9 -> 3 ->1 (1을 빼고 3으로 두 번 나눈다) : 연산 횟수는 3 10 -> 5 -> 4 -> 2 -> 1 (2로 나누고 1을 빼고 2로 두 번 나눈다): 연산 횟수는 4 n = int(input()) d = [0]*(n+1) for i in range(2,n+1): d[i] = d[i-1]+1 if i %2 == 0: d[i] = min(d[i//2]+1,d[i]) if i%3 ==0: d[i] = min(d[i//3]+1,d[i]) print(d[n]) 2021. 12. 20.
백준1789: 수들의 합 (Python) 1. 더할 값을 1씩 더해서 합을 출력하는 방법 S = int(input()) sum = 0 def fun(S,sum,n): while S >= sum: n += 1 sum += n print(n - 1) fun(S,sum,0) 2. 수들의 합 공식 n*(n+1) / 2를 사용하는 방법 S = int(input()) def fun(S,n): while S >= n*(n+1)/2: n += 1 print(n - 1) fun(S,1) 2021. 12. 12.
백준11653: 소인수 분해 (Python) N = int(input()) def fun(N): for i in range(2,N+1): while (N%i == 0): N = int(N/i) print(i) continue fun(N) 몫이 0인경우만 출력 주말이니까 가볍게,,, 2021. 12. 12.
백준14501: 퇴사 (Python) https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 백준이의 최대 수익을 내기 위한 코드 day = int(input()) Ti = [] Pi = [] salary = [0 for i in range(day+1)] sum = 0 for i in range (0,day): T,P = map(int,input().split()) Ti.append(T) Pi.append(P) for i in range(0,day): sum = max(sum,salary[i]) if i+Ti[i]>day: continue salary[i+Ti[i]] = max(sum+Pi[i],salary[i+Ti[i]]).. 2021. 12. 2.
반응형