본문 바로가기

전체 글

(156)
[백준/17427/파이썬] 약수의 합2 소스코드 N = int(input()) ans = 0 for i in range (1,N+1): ans += (N//i) * i print(ans) 알고리즘 틀린풀이 N = int(input()) def sum_yaksu(n): return sum([i for i in range(1, n+1) if n % i == 0]) ans = 0 for i in range (1,N+1): ans += sum_yaksu(i) print(ans) 문제 그대로 약수의 합을 구하는 함수를 만들고 for문을 돌면서 합을 구하는 알고리즘을 짰는데 시간 초과가 났다. DP문제도 아니고 이거에서 시간을 어떻게 줄일까 생각하다가 수학적으로 접근해야하는 문제임을 깨달았다. 진짜 설명 6까지 더해야 한다고 할때 1 -> 1 ( 1 )..
[백준/4375/파이썬] 1 소스코드 def one(n): ones = [1] i = 1 while (1): if ones[-1] % n == 0 : return ones[-1] else : ones.append(ones[-1]+10**i) i += 1 while (1): try: n = int(input()) except: break print(len(str(one(n)))) 알고리즘 n의 배수라는 건 결국 어떤수를 n으로 나눴을때 나머지가 0 이라는 것이다. 따라서 1로만 이루어진 list를 만들어서 ( ones[1,11,111,...]) 마지막 숫자 + 10의 배수를 해주면 1로만 이뤄진 list가 생성이 된다. 마지막 자리에 있는 숫자가 나눠떨어지면 그 숫자를 리턴해주고 결과는 그 숫자의 길이를 출력해주면 된다.
[백준/16974/파이썬] 레벨 햄버거 - 재귀 소스코드 N,X = map(int,input().split()) bur = [1] * 51 pat = [1] * 51 for i in range(1, N+1): bur[i] = 2 * bur[i-1] + 3 pat[i] = 2 * pat[i-1] + 1 def eat(n, x): if n == 0: return x if x == 1: return 0 elif x
[백준/2003/파이썬] 수들의 합2 - brute force 소스코드 N,M = map(int,input().split()) A= list(map(int,input().split())) start=0 answer=0 end=0 while start 앞의 원소를 뺌)
[백준/1309/파이썬] 동물원 - DP 소스코드 n = int(input()) dp =[1,3,7] for i in range (2,100001): dp.append((dp[i]*2 + dp[i-1])%9901) print(dp[n]%9901) 알고리즘 점화식 (dp[i]*2 + dp[i-1])만 찾으면 쉽게 풀리는 문제였다. 다만 처음에 메모리초과 에러가 났는데 찾아보니 계산할때마다 9901의 나머지를 추가해줘야 했다. 나머지로 계산을 해도 전체 결과에서 나머지 계산을 한게 같게 되는걸 알게 되었다.
[백준/14889/파이썬] 스타트와 링크 소스코드 from itertools import combinations N = int(input()) startlink = [list(map(int, input().split())) for _ in range(N)] answer = int(1e9) num = [i for i in range(N)] team = list(combinations(num,N//2)) for start_player in team: start_total = 0 link_total = 0 link_player = list(set(num)-set(start_player)) for i,j in list(combinations(start_player,2)): start_total += startlink[i][j] start_total +..
[백준/11726/파이썬] 2×n 타일링 소스코드 n = int(input()) dp = [0]*(1001) dp[1] = 1 dp[2] = 2 for i in range (3,1001): dp[i] = dp[i-1]+dp[i-2] print(dp[n]%10007) 알고리즘 dp라는걸 알고 풀면 정말 쉬운 문제입니다. 2 - 2 3 - 3 4 - 5 5 - 8 6 - 13 7 - 21 8 - 34 9 - 55 이렇게 n번째 숫자를 구할때는 (n-1번째) + (n-2번째)를 해주면 됩니다. 이제 백준 실버 난이도는 손쉽게 풀 수 있을 것 같다는 자신감을 얻었습니다.
[백준/1182/파이썬] 부분수열의 합 소스코드 from itertools import combinations N,S = map(int,input().split()) seq = list(map(int,input().split())) result = [] cnt = 0 for i in range(len(seq)+1): result = result+list(combinations(seq,i)) del result[0] for i in result: if (sum(i)) == S: cnt += 1 print(cnt) 알고리즘 파이썬의 itertools에 있는 combinations를 이용하여 부분 순열을 구한다. 공집합은 제거한다 합이 S인 개수를 구한다. 기본적인 문제라 시시했다.