본문 바로가기

Coding test

(123)
[백준/15651/파이썬] N과 M (3) 소스코드 n,m = list(map(int,input().split())) s = [] def dfs(start): if len(s)==m: print(' '.join(map(str,s))) return for i in range(1,n+1): s.append(i) dfs(i+1) s.pop() dfs(1) 알고리즘 N과 M (2)와 똑같은 알고리즘이다.(더 쉬운 느낌) start를 1로 바꿔주고 중복 허용해주면 된다! https://codekunst.tistory.com/49
[백준/15650/파이썬] N과 M (2) 소스코드 n,m = list(map(int,input().split())) s = [] def dfs(start): if len(s)==m: print(' '.join(map(str,s))) return for i in range(start,n+1): if i not in s: s.append(i) dfs(i+1) s.pop() dfs(1) 알고리즘 파이썬에 있는 기능인 itertools의 permutation을 사용해서 풀면 될 것 같았으나 문제의 취지에 맞게 백트래킹을 이용해서 풀려고 했다. 1부터 시작해서 s에 담고 for문을 돌면서 s에 포함되지 않은 애들을 삽입해 나가는 dfs 알고리즘이다. 그리고 조건을 만족하면 출력하고 다음 수열을 찾는다.
[백준/11057/파이썬] 오르막 수 - DP 소스코드 n = int(input()) dp = [1]*10 for i in range(1,n) : for j in range(1,10) : dp[j] += dp[j-1] print(sum(dp)%10007) 알고리즘 알고리즘을 설계하다 보니 너무 막막해서 한번씩 써보았다. 그랬더니 원하는 숫자를 구하기 위해서는 그 전 숫자와 그 전의 위 숫자를 더하면 된다는 규칙을 발견했다. dp라는 유형이라고 알고 있어서 이런 식으로 접근할 수 있었지만 아니라면.. 어려웠을 것 같다.
[백준/17425/파이썬] 약수의 합 소스코드 import sys MAX = 1000000 dp = [0] * (MAX + 1) s = [0] * (MAX + 1) for i in range(1, MAX + 1): #1부터 최대값까지 j = 1 # i에 곱할 j를 선언 while i * j 코드 상황에 맞추어 두 구현체(PyPy3, Python3)를 적절하게 사용하는 것이 효율적이라고 할 수 있다. https://ralp0217.tistory.com/entry/Python3-%EC%99%80-PyPy3-%EC%B0%A8%EC%9D%B4 Python3 와 PyPy3 차이 Python3 와 PyPy3 차이 평소에 알고리즘 문제를 풀면서 Python을 지원하는 언어를 선택할 때, Python3와 PyPy3가 대표적으로 있었다. 원래 알던 개념은 ..
[백준/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 앞의 원소를 뺌)