전체 글

공부중인 학생입니다! 글에서 틀린 곳이 있으면 지적 부탁드립니다 블로그 이사 https://velog.io/@joohr1234
def solution(n): # n-1의 가장 작은 약수 구하기 # x>1 n = n-1 for d in range(2, int(n**(0.5))+1): # 약수찾기 if n % d == 0: return d return n 문제를 n-1의 1이 아닌 가장 작은 약수 구하는 문제로 재해석함 // n = Q*x + 1 (x>1) // n-1 = Q*x (x>1) 1. n = n-1 2. 2부터 sqrt(n)까지의 숫자로 n을 나눠본다.(sqrt(n)까지만 찾아도 충분히 찾을 수 있다.) 만약 나머지가 0이 되는 수가 있다면 그 수를 반환한다. 3. 이 숫자 중 약수가 없다면 소수이므로, 1과 자기자신밖에 약수가 없게 된다. => 자기 자신 반환 +) 약수를 루트n까지만 찾아도 되는 이유 ex) 18의 경..
def solution(sizes): _sizes = [sorted(s) for s in sizes] return max([x[0] for x in _sizes]) * max([x[1] for x in _sizes]) sizes = [(3,6), (5,4), ...] // 가로, 세로 길이가 무작위로 들어있음. 1. sorted함수를 이용하여 (작은거, 큰거)로 sizes 원소를 정렬한다. 즉 x[0]은 작은 거, x[1]은 큰 거 2. (작은 것들 중 max)*(큰 것들 중 max)의 값을 반환한다. 부가설명: 큰 것들 중 가장 큰 것은 가로, 세로 중 하나가 될 수밖에 없고(필수) 그 외의 나머지 하나는 최대한 작은 것으로 골라야함. => 작은 것들 중 가장 큰 것으로 import heapq def ..
def solution(sizes): w, h = 0, 0 for s in sizes: w1, h1 = max(w, s[0]), max(h, s[1]) w2, h2 = max(w, s[1]), max(h, s[0]) if (w1+h1
def solution(a, b): days = [0,31,29,31,30,31,30,31,31,30,31,30,31] #0월,1월,2월~~ names = ['THU','FRI','SAT','SUN','MON','TUE','WED'] dayCount = b for i in range(1, a): #5월: 1월~4월 일 수 더해줌 dayCount += days[i] return names[dayCount % 7] - days: 인덱스에 해당하는 월이 포함하는 일 수 배열(0은 임시로 만든거, 1월은 days[1], 2월은 days[2] ...) - names: 1일이 금요일이 될 수 있도록 배치한 요일 문자열들 1. daycount에 b(일)를 더해줌 2. a이전 월에 해당하는 일 수를 모두 daycoun..
def solution(numbers): answer = set() for i in range(0, len(numbers)-1): for j in range(i+1, len(numbers)): answer.add(numbers[i]+numbers[j]) return sorted(list(answer)) => sorted(answer)도 가능 1. i는 [0~N-2], j는 [i+1~N-1]를 반복함. (중복되지 않도록 j는 i+1부터 반복) # 버블정렬 느낌? 2. 서로 다른 인덱스를 더한 값을 집합에 넣음. 중복방지 3. 집합을 리스트로 만들고 정렬해서 반환 from itertools import combinations def solution(numbers): answer = set() com = co..
def solution(d, budget): support = 0 d.sort() # 오름차순 정렬 for money in d: if money>budget: break support += 1 budget -= money return support 1. 받은 금액 리스트를 오름차순으로 정렬해준다 [1,2,3,4] 2. 금액을 하나씩 빼서 예산과 비교한 후, 예산이하의 값이면 support를 1증가시켜주고 예산에서 금액을 뺀다. 3. 만약 예산보다 금액이 크다면, 그 뒤에 나오는 금액들은 항상 예산보다 클 것이기 때문에 break해준다.
def solution(n): numStr = [] while (n != 0): # 3진법 거꾸로 0021 numStr.append(n%3) n = n//3 numStr.reverse() # 3진법 1200 # 자리수*(3^인덱스) return sum([digit*(3**i) for i, digit in enumerate(numStr)]) 1. 3을 계속 나누면서 나머지를 구하는 방식으로 3진법 각 자리수를 구함. => [0,0,2,1] 2. 인덱스를 지수로 사용하기 위해 reverse()를 해줌 => [1,2,0,0] 3. 각 자리수에 맞는 3의 지수승을 곱한 리스트의 sum을 리턴
from collections import defaultdict def isPrime(num): if num==1: return False end = int(num**(0.5)) for i in range(2, end+1): #2~end if num%i == 0: return False return True def Factorization(num): primes = defaultdict(int) #{소인수: 지수} tmp=num for k in range(2, num+1): if isPrime(k): while tmp%k == 0 and tmp != 0: primes[k] += 1 tmp = tmp//k return primes def solution(left, right): answer = 0 for ..
1. value값을 기준으로 딕셔너리 정렬 dic = {1:4, 2:3, 3:2, 4:1} sorted(dic.items(), key=lambda x:x[1]) # 오름차순 sorted(dic.items(), key=lambda x:x[1], reverse=True) # 내림차순 2. value값을 기준으로 key 정렬 dic = {1:4, 2:3, 3:2, 4:1} sorted(dic.keys(), key=lambda x:dic[x]) sorted(dic, key=lambda x:dic[x]) 키 값들만 정렬! .keys()를 생략하든 안하든 같은 결과를 냅니다.
fladi
주프링 블로그