전체 글

말보다는 실천하는 사람
😄 아이디어 1. 선대칭을 통해 일직선 형성 👉 두 좌표 사이의 값 계산 2. 상하좌우 당구대를 활용한 원쿠션 결과를 확인 👉 X축 혹은 Y축에서 동일 선상 위치 시 계산 제한 😄 풀이 def solution(m, n, startX, startY, balls): answer = [] for ball in balls: arr = [] if (startY != ball[1] or startX > ball[0]): arr.append(calcDistance([startX + (m - startX) * 2, startY], ball)) if (startY != ball[1] or startX < ball[0]): arr.append(calcDistance([-startX, startY], ball)) if (s..
😄 아이디어 1. _!len_list!_리스트로 접두사로 비교될 길이 저장 👉 0번째 길이와 같은 값들은 우선 저장 2. _!len_list!_의 길이만큼 잘라 _!dt!_변수에 _!key!_보관 👉 동일한_!key!_에 값이 있으면 예외처리 3. 예외처리된 것이 없으면 현재 값 _!dt!_보관 & 현재 값 길이 대조 후_!len_list!_에 보관 def solution(phone_book): answer = True dt = {} phone_book.sort(key = len) len_list = [len(phone_book[0])] for i, val in enumerate(phone_book): if len(val) == len_list[0]: dt[val] = dt.get(val, 0) + 1 ..
😄 아이디어 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..
thisisdj
codenextdoor