목록문제 풀이 (103)
honey_pot
https://school.programmers.co.kr/learn/courses/30/lessons/12911 bin()를 통해 2진수로 변환한 값의 0b를 제외한 숫자들에서 1의 개수를 세서 n의 경우와 비교한다 1234567def solution(n): num = n+1 while True: if bin(n)[2:].count('1') == bin(num)[2:].count('1'): break num += 1 return numColored by Color Scriptercs
https://school.programmers.co.kr/learn/courses/30/lessons/12900 점화식 dp[i] = dp[i-1] + dp[i-2]를 먼저 도출하고 초기값을 넣어준뒤 점화식에 따라 값을 구하면서 모듈러 연산 분배법칙으로 값을 작게 만들어 테이블을 채운 뒤 답 출력 1 2 3 4 5 6 7 8 9 10 def solution(n): # dp 테이블 정의 # dp[i] = dp[i-1] + dp[i-2] dp = [0 for _ in range(n)] # 초기 조건 삽입 dp[0] = 1 # n=1 dp[1] = 2 # n=2 for i in range(2,n): dp[i] = (dp[i-1]% 1000000007 + dp[i-2]% 1000000007) % 1000000..
https://school.programmers.co.kr/learn/courses/30/lessons/12902 수가 너무 커 오버플로우가 발생할 경우를 방지하기 위해 모듈러 연산을 이용해 저장되는 값을 작게 만들어 저장한다. cf. 나머지 모듈러 연산은 페르마의 소정리를 이용해 B의 역원인 B^-1 을 구해 곱하는 형식으로 구한다. (ex: 4/3mod11 = 4*4 mod 11 = 16 mod 11 = 5 mod 11) 1 2 3 4 5 6 7 8 9 10 11 def solution(n): # 1. dp 정의 # dp[i] = 4*dp[i-2] - dp[i-4] dp = [0 for _ in range(n+1)] # 2. 초기값 채우기 dp[0] = 1 dp[2] = 3 # 3. dp 테이블 채우..
https://school.programmers.co.kr/learn/courses/30/lessons/42885 deque로 푸는 방법, 투포인터로 푸는 방법 두 가지로 제출해보고 stack으로도 풀어보는 중 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # 투포인터 풀이 def solution(people, limit): answer = 0 people.sort(reverse=True) l, r = 0, len(people) - 1 while l
https://programmers.co.kr/learn/courses/30/lessons/77485 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 def solution(rows, columns, queries): def _rotate(x1, y1, x2, y2): # 내부 함수 -> 언더바 min_num = [] # 위치를 바꾼 모든 숫자를 넣고 최종적으로 위치가 바뀐 숫자들 중 가장 작은 숫자 넣고 리턴할 변수 # 윗변 -> 오른쪽으로 s..
https://programmers.co.kr/learn/courses/30/lessons/12953 1 2 3 4 5 6 7 8 from math import gcd def solution(arr): answer = arr[0] # 배열이 정렬되어 있는 경우이므로 0번 인덱스 수가 가장 작으므로 0번에서 시작 for num in arr: # arr 배열에 존재하는 모든 숫자들을 answer = answer * (num // gcd(answer, num)) # 최대공약수로 현재 숫자를 나눈 값에 지금까지 구한 공배수를 곱한다. return answer Colored by Color Scripter cs
https://programmers.co.kr/learn/courses/30/lessons/12978 플로이드 워셜 풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받음 def solution(N, road, K): arr = [[float('inf')]*N for _ in range(N)] # 칸을 최대정수로 채운 N*N 격자 생성 for i in range(N): arr[i][i] = 0 # 자기 자신으로 오는 칸은 0으로 초기화 # 격자에 각 마을의 거리 입력 for r in road: i,j,dist = r # 격자 인덱스에 맞추기 위해 -1 i,j,dist = i-1..
https://programmers.co.kr/learn/courses/30/lessons/84512 풀이 참고 -> https://programmers.co.kr/questions/25140 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def solution(word): # 인덱스가 순서 다섯개의 문자로 한 자리 단어만 만들면 A,E,I,O,U 순서 vowels = ['A', 'E', 'I', 'O', 'U'] p = [5 ** i for i in range(1,6)] # 각 문자길이에 따라 만들 수 있는 문자열 경우의 수 max_num = sum(p) # 경우의 수 총합 (사전의 맨 끝 단어) answer = 0 # 문자간의 간격을 더하여..