알고리즘

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 ..
from collections import Counter, defaultdict def solution(N, stages): answer = [] _stages = dict(Counter({n+1:0 for n in range(N+1)})) _stages.update(dict(Counter(stages))) # {stage: 개수} failure = defaultdict(list) # {실패율: [stage1, stage2, ...]} clear = _stages[N+1] for i in range(N, 0, -1): clear += _stages[i] if clear == 0: failure[0].append(i) else: failure[_stages[i]/clear].append(i) for f i..
def solution(n, lost, reserve): students = [1 for i in range(n)] for r in reserve: students[r-1] += 1 for l in lost: students[l-1] -= 1 for i in range(n): if students[i] == 2: if i>0 and students[i-1] == 0: students[i-1] = 1 students[i] = 1 elif i0, students))) 체육복이 없는 학생(체육복 도둑맞은 학생)/ 여분 체육복이 있는 학생/ 체육복 1. 모든 학생의 체육복개수를 저장한 배열 students를 만듦. 처음엔 모두 체육복이 1개씩 있다고 가정 students = [1,1,1,1,1, ...] 2. ..
def solution(answers): answer = [] supo = {1:[1,2,3,4,5], 2:[2,1,2,3,2,4,2,5], 3:[3,3,1,1,2,2,4,4,5,5]} idx = {1:0, 2:0, 3:0} correct = [-1,0,0,0] for a in answers: for i in [1,2,3]: if supo[i][idx[i]] == a: correct[i] += 1 idx[i] = (idx[i]+1)%len(supo[i]) max_correct = max(correct) for i, c in enumerate(correct): if max_correct == c: answer.append(i) return sorted(answer) 1. supo딕셔너리: 수포자 번호 1,..
import re def solution(dartResult): bonus = {'S' : 1, 'D' : 2, 'T' : 3} option = {'' : 1, '*' : 2, '#' : -1} p = re.compile('(\d+)([SDT])([*#]?)') dart = p.findall(dartResult) for i in range(len(dart)): if dart[i][2] == '*' and i > 0: dart[i-1] *= 2 dart[i] = int(dart[i][0]) ** bonus[dart[i][1]] * option[dart[i][2]] answer = sum(dart) return answer def solution(dartResult): square = {"S":1, "D":..
def solution(dartResult): square = {"S":1, "D":2, "T":3} score = curr = prev = 0 blockSet = [] block = "" for d in dartResult: if d.isdigit() and (not block.isdigit()): # 한 블록 완성 blockSet.append(block) block = d else: block += d blockSet.append(block) for block in blockSet: num_str = "" for b in block: if b.isdigit(): num_str += b elif b in ["S", "D", "T"]: curr = int(num_str) curr = curr ** squ..
def solution(x): sum = 0 str_x = str(x) for s in str_x: sum += int(s) if (x >= sum): if (x % sum == 0): return True return False 1, 값을 str로 받아 자릿수들을 모두 더해준다. 2. 더한 값이 원래 값보다 작은지 확인한 후, 나누어떨어지는지 확인하여 적당한 값을 return 해준다. (첫 번째 if 문은 필요없었던 것 같다. 항상 자릿수를 더한 값보다 원래 값이 클 수밖에 없으니 말이다.) def solution(x): if (x % sum([int(s) for s in str(x)]) == 0): return True return False solution = lambda x: (x % sum([i..
fladi
'알고리즘' 카테고리의 글 목록 (13 Page)