😄 아이디어 1. 1 ~ 9 사이의 우선순위가 중복해서 존재가능 👉 _!max_key!_변수를 통해 실행예정 key 관리 2. _!priorities!_리스트에서 꺼낸 값과 _!max_key!_비교 👉 일치하면 실행, _!max_key!_ 변동여부 확인 👉 불일치하면 현재 리스트에 다시 추가 import math def solution(priorities, location): answer = 0 dic = {} max_key = -1 for prior in priorities: dic[prior] = dic.get(prior, 0) + 1 max_key = max(max_key, prior) priorities[location] += 0.5 count = 0 while len(priorities) > 0..
전체 글
말보다는 실천하는 사람😄아이디어 1. 2진수로 변환 후 가장 앞자리에 '0' 삽입 2. 0을 만나면 현재를 1로 바꾸고 뒷자리는 0으로 수정 👉 현재 수보다는 크면서 가장 작은 수를 유지하려면 가장 큰 숫자를 만들어내는 비트부터 수정해야함. 3. 수정된 숫자를 최소값으로 유지되는 변수 _!min_num!_과 비교하고 반복이 종료되면 결과 리스트에 저장 def solution(numbers): answer = [] for num in numbers: binary = list('0' + format(num, 'b')) min_num = pow(10, 15); for i, val in enumerate(binary): if val == '0': tmp = binary.copy() tmp[i] = '1' if i + 1 < len(..
😄 아이디어 1. 동적프로그래밍 적용 : 피보나치 2. 모듈러 산술 def solution(n): answer = 0 dp = [0 for _ in range(60_001)]; idx = 0 # DP # n = 1 // 1 # n = 2 // 2 # n = 3 // 3 # n = 4 // 5 while (n >= idx): idx += 1 if idx == 1: dp[idx] = 1 continue elif idx == 2: dp[idx] = 2 continue dp[idx] = (dp[idx - 2] + dp[idx - 1]) % 1_000_000_007 return dp[idx - 1] ✔️링크:https://school.programmers.co.kr/learn/courses/30/lessons/1..
😄 아이디어 1. 매 ms를 반복문으로 구현 (최대값 1000 * 1000, 넉넉히 추가 부여) 2. 현재 시간에 작업이 들어오면 _!task!_변수에 보관 3. _!taskEndTime!_로 현재 작업여부 판단 👉 수행하는 작업이 없으면, _!tasks!_에서 가장 소모 값이 적은 작업수행 4. 추가될 작업 혹은 관리되는 작업이 없다면 종료 def solution(jobs): length = len(jobs) maxTime = 100_000_000 total = 0 tasks = [] taskEndTime = 0 for t in range(0, maxTime): for index, job in reversed(list(enumerate(jobs))): if t == job[0]: tasks.append..
😄 아이디어 1. 문자열의 정렬방식 이해 필요 (가장 첫 글자부터 아스키코드로 변환해 비교) 2. _!number!_의 조건이 힌트 (1,000 이하) 👉 문자열을 최소 3회 이상 반복시키고 비교 def solution(numbers): nums = list(map(str, numbers)) nums.sort(key = lambda x : x * 4, reverse = True) return str(int(''.join(nums))) 😄 오답 # 오답! from functools import cmp_to_key def solution(numbers): nums = sorted(numbers, key = cmp_to_key(getBigNum)) #print('nums', nums) return str(in..
😄 아이디어 1. _!words!_내 사용된 단어를 알파벳으로 변환하고 set 형태로 관리해, 변환 경우의 수를 최소화한다. 2. _!begin!_으로 DFS 시작, 변수로 주어진 단어는 첫 알파벳부터 _!set!_내의 글자로 바꿔가며 _!words!_내 존재확인 3. 존재하는 경우 _!visited!_의 값을 방문한 것으로 바꿔주고 다음 DFS 실행 4. 값이 최소값으로 변경되었다면 그대로 반환, 아니라면 0으로 반환 answer = 1_000_000_000 def solution(begin, target, words): global answer charset = set(char for word in words for char in word) visited = [0 for _ in words] coun..
😀 아이디어 1. 1시간이 지날 때마다 모든 경우의 수를 구하는 것은 시간복잡도 초과 예상 2. 야근할 양이 가장 많은 업무부터 소거해야한다. 남은 업무가 제곱되어 계산되기 때문. 3. 배열을 내림차순으로 정렬하고, 가장 높은 값을 기준으로 n의 값을 하향 4. n == 0이 될 때 while문을 빠져나오고 works 배열 내 값으로 야근지수 계산 def solution(n, works): works.sort(reverse = True) maxIndex = len(works) while (n > 0): max = works[0] works[0] = works[0] - 1 n = n - 1 if n == 0: break for i in range(1, maxIndex): next = works[i] if ..
def solution(n, computers): length = len(computers) graph = [[0 for _ in range(length)] for __ in range(length)] visited = [[0 for _ in range(length)] for __ in range(length)] net = [0] * n for i in range(length): com = computers[i] for j in range(length): if i == j or com[j] == 0: continue graph[i][j] = 1 networks = 0 for i in range(n): for j in range(n): if i == j or graph[i][j] == 0 or visite..