1의 갯수가 동일해야 한다는 점에 착안해서 수학적으로 풀어봤다. def solution(n): b = bin(n).replace('0b', '0') m = b.rfind('01') k = b[m+2:].count('1') b = b[:m] + '10' + '0'*(len(b)-m-2-k) + '1'*k answer = int(b, 2) return answer programmers solution def nextBigNumber(n): one_count = bin(n).count('1') for compare_num in range(n+1, 2*n+1): if bin(compare_num).count('1') == one_count: break return compare_num 복잡도가 안좋다고는 하는데..
점프와 순간 이동 def solution(n): ans = 0 def dp(k): if k == 1 or k ==2: return 1 else: return min(dp(k-1)+1, dp(k//2)+k%2) return dp(n) 테케 두개 중 하나가 recursion error가 났다. def solution(n): value = [0] * (n+1) def dp(k, value): if k == 1: return 1 elif k == 2: return 1 else: return min(value[k-1]+1, value[k//2]+k%2) for i in range(1, n+1): value[i] = dp(i, value) return value[n] 이렇게 수정해서 테스트 결과는 바르게 나왔지만 ..
최댓값과 최솟값 def solution(s): s = list(map(int,s.split())) answer = str(min(s)) + " " + str(max(s)) return answer JadenCase 문자열 만들기 '구분자'.join(리스트) : join 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수 '리스트0(구분자)리스트1(구분자)리스트2' 의 형식 def solution(s): snt = s.split() for i in range(len(snt)): if not snt[i][0].isnumeric(): snt[i] = snt[i][0].upper() + snt[i][1:].lower() answer = ' '.join(snt) r..
import sys input = sys.stdin.readline n = int(input()) a = list(map(int, input().split())) dp = [1]*n for i in range(1, n): for j in range(i): if a[i] > a[j]: dp[i] = max(dp[i], dp[j]+1) print(max(dp)) #동적계획법
import sys input = sys.stdin.readline n = int(input()) s = [0]*n for i in range(n): s[i] = int(input()) s.sort(reverse=True) def triangle(num): if num+3 > n: return -1 else: m = s[num] a, b = s[num+2], s[num+1] if a+b > m: return a+b+m else: i = num + 1 return triangle(i) print(triangle(0)) 나보다 코드 길이 짧은 사람들 코드를 봤는데, 리스트 덧셈 활용이 능숙한 사람이었다. 난 바쁘니까 이정도로 만족하기로 함 #그리디
import sys input = sys.stdin.readline n = int(input()) t = [0]*n for i in range(n): t[i] = int(input()) v = [0]*101 v[1] = 1 v[2] = 1 v[3] = 1 v[4] = 2 v[5] = 2 for i in range(6, 101): v[i] = v[i-2] + v[i-3] result = [0]*n for i in range(n): result[i] = v[t[i]] print(*result,sep='\n') 다이나믹 프로그래밍은 이제 어느정도 감을 잡은 느낌.. #동적계획법
import sys input = sys.stdin.readline n = int(input()) value = [0]*1000001 value[1] = 1 value[2] = 2 for i in range(3,1001): value[i] = value[i-1]+value[i-2] result = value[n] % 15746 print(result) 틀렸다고 한다 백준은 공부를 하라는 건지 말라는 건지 왜 틀렸는지를 알려주지 않는 이유가 뭐임? import sys input = sys.stdin.readline n = int(input()) value = [0]*1000001 value[1] = 1 value[2] = 2 for i in range(3,1001): value[i] = (value[i-1..
import sys input = sys.stdin.readline n = int(input()) def dpsum(t): if t == 1: return 1 elif t == 2: return 2 else: return dpsum(t-1)+dpsum(t-2) result = dpsum(n)%10007 print(result) 시간초과 뜸.. import sys input = sys.stdin.readline n = int(input()) value = [0]*1001 value[1] = 1 value[2] = 2 for i in range(3,1001): value[i] = value[i-1]+value[i-2] result = value[n] % 10007 print(result) 9095번과의 차이..