목록전체 글 (39)
CS log
https://www.acmicpc.net/problem/9663 import sysdef dfs(n) : global ans if n==N : # N행까지 진행한 경우 경우의 수 가능 : 성공 ans+=1 return for j in range(N) : if v1[j] == v2[n+j] == v3[n-j] == 0: # 열/대각선 모두 없는 경우 v1[j] == v2[n+j] == v3[n-j] = 1 # 표시 dfs(n+1) v1[j] == v2[n+j] == v3[n-j] = 0 # 해제N = int(input())ans = 0v1 = [0]*Nv2 = [0]*(2*N)v3 = [..
https://www.acmicpc.net/problem/15663 import sysdef dfs(n,tlst) : if n==M : # 종료조건 ans.append(tlst) # tlst : 현재까지 만들어진 순열 return prev = 0 # 중복 안하기 위해서 설정한 값 for j in range(N) : # 주어진 리스트에서 if v[j] == 0 and prev != lst[j] : # 숫자가 이미 사용 안했는가? + 중복 확인 prev = lst[j] # 이전 숫자와 같지 않은 경우만 선택해서 중복 방지 v[j]=1 # 숫자를 선택했으므로 방문 상태를 1로 설정 ..
https://www.acmicpc.net/problem/14225import sysn = int(input())init_arr = map(int, input.split())plus_arr = []for i in range(len(init_arr)) : for j in range() : plus_arr.append(init_arr[i] + init_arr[j])set_data = set(plus_arr)list_data = list(set_data)init_arr.extend(list_data)print(init_arr) 내가 처음 접근했던 방식은 일단 굉장히 robust하게.. 수열을 합치는 느낌이다.그런데 부분 수열의 합으로 나올 수 "없는" 가장 작은 자연수 를 어떻게 구할 지가 ..
import sysinput = sys.stdin.readlinen = int(input())arr = list(map(int, input().split()))dp = [[0] * (n + 1) for _ in range(n + 1)]for i in range(1, n + 1): for j in range(1, n + 1): if arr[-i] == arr[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])print(n - dp[-1][-1])
https://www.acmicpc.net/problem/11726 이 문제에서는 이런 식으로 타일 그림을 그려봤는데, 솔직히 규칙성을 찾기는 어려웠다 ㅠ 그런데 이렇게 마구잡이로 찾지 말고그 직전에 했던 것에 박스를 추가하는 방식을 사용하는 것이다.그래서 발견한 규칙성은 dp[i] = 2*i 길이 직사각형 만드는 방법 수 = dp[i-1] + dp[i-2]*2 N = int(input())# dp 배열 초기화dp = [0]*(N+1)dp[1], dp[2] = 1,3for i in range(3,N+1) : dp[i] = dp[i-1] + dp[i-2]*2ans = dp[N]print(ans%10007)