목록2025/12/19 (7)
cmod.ify
AoP(Aspect of Programming)관점 지향 프로그래밍 쓰는 이유 Code는 두가지로 나뉨Basic Logic:해당 코드가 수행해야 하는 본연의 기능Common Concern:공통적으로 반복되어 나타나는 부가 기능 둘이 같이 진행하면 서로 간섭하는 코드가 생김두가지를 분리해서 코딩해야함내부적으로 동시에 실행하는 걸 프록시 패턴이라고 함 파이썬에서 데코레이터 라고 부름데코레이터 기초 def deco(func): def inner(): print("실제 수행 함수") return inner@decodef target(): print("타겟이다!")target()데코레이터 활용실행 시간을 확인하는 데코레이터1. 반복문 피보나치2. 재귀 피보나치반복문 피보나치는 바로 데..
처음에 점화식 쉽게 생각해서d[i-1] + s[i] 전칸까지의 합이랑 d[i-2] + s[i] 전전칸 까지의 합 중에 최댓값 구하면 되는게 아닌가 생각했는데그러면 무조건 모든 칸을 밟게 됨 규칙에선 3번 연속 밟으면 안 된다고 했음d[i-2]+stair[i] 한칸을 띄운 버전이랑 d[i-3] 두칸 전까지의 합에 한칸을 띄우고 stair[i-1] 이전칸의 합과 stair[i]현재까지의 합을 더해야 한다import sysinput = sys.stdin.readlinestair = [0] * 301n = int(input())for i in range(1, n+1): t = int(input()) stair[i] = td = [0] * 301d[1] = stair[1]d[2] = stair[1] +..
일단 처음에 재귀라고 생각을 했는데 실행시간이 짧아서 DP라고 생각은 들었는데 어떻게 해결해나갈지 감이 잘 안왔다.DP부분이 약해서 그냥 제미나이한테 도움을 받았다. (그런데 틀림) 틀린 코드import sysinput = sys.stdin.readlinen = 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], d[i//2] + 1) elif i%3 == 0: d[i] = min(d[i], d[i//3] + 1)print(d[n]) DP 초기 부분이 틀리지 않았을까 생각했다. 가변적으로 설정하니까 d[2]=1 값을 지정이 불가능해서 값을..
import sysinput = sys.stdin.readlinen = int(input())for j in range(n): print(" ", end = '')for i in range(0, n): if i % 2 == 0: print(i) elif i%2 == 1: for j in range(n-i): print(" ", end = '') print(i, end = '') for j in range(i*2): print(" ", end = '')else: print(f'{n} ', end = '') for j in range(n+1): print(f'{j} ', e..
처음엔 피보나치 함수 DP쓰는 기본 방식에 전역변수로 cnt 의 개수를 세는 방법으로 풀었다근데 그럴 경우엔 dp를 쓰게 되니 접근하지 않는 0과 1의 개수를 놓치게 된다0과 1을 세는 dp로 채워 나가면서 풀어야 하는 문제다import sysinput = sys.stdin.readlinezero_count = [0] * 41one_count = [0] * 41zero_count[0]= 1one_count[1] = 1for i in range(2,41): zero_count[i] = zero_count[i-1] + zero_count[i-2] one_count[i] = one_count[i-1] + one_count[i-2]t= int(input())for _ in range(t): nu..
import sysinput = sys.stdin.readlinen,k = map(int, input().split())coins = []for i in range(n): c = int(input()) coins.append(c)coins.reverse()cnt = 0for c in coins: if c k: cnt += k // c k %= cprint(cnt)
출력 형식을 사전순으로 정렬하는 거 까먹음문제를 잘 읽자 집합은 & 연산자로 교집합을 구할 수 있다 import sysinput = sys.stdin.readlinen,m = map(int, input().split())noListen = set()noSaw = set()for i in range(n): name = input() noListen.add(name)for j in range(m): name = input() noSaw.add(name)cnt = 0result = noListen & noSawrealResult = []for word in result: cnt+=1 realResult.append(word.split('\n')[0])print(cnt)realR..