파이썬 알고리즘 : 조이스틱

2024년 5월 14일 알고리즘 문제풀이 문제 조이스틱 난이도 Lv.2 코드 1차 55.6점 / 100점 진짜 어려웠다. A글자를 원하는 글자로 바꾸는 것은 어렵지 않았으나, 어떤 방향으로 커서를 움직이도록 설정할지가 고민됐다. 양 옆의 글자를 보고 바꾸기 위해 조작을 많이해야 하는 쪽으로 움직이도록 설정해주었다. 그래야 혹시 바꿀 필요가 없는 쪽으로 이동하지 않을 거라고 생각했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def solution(name): def cal(x): max_val = ord("Z")+1 return min(ord(name[x])-ord(tmp[x]),(max_val-ord(name[x]))) n = len(name) name = list(name) answer = 0 idx = 0 tmp = list('A'*n) while True: if name[idx] != tmp[idx]: answer += cal(idx) tmp[idx] = name[idx] if name == tmp: break if cal((idx-1)%n) >= cal((idx+1)%n): idx = (idx-1)%n else: idx = (idx+1)%n answer += 1 return answer 2차 51.9점 / 100점 ...

2024년 5월 14일 · 4 분 · 배준수

파이썬 알고리즘 : H-Index

2024년 5월 13일 알고리즘 문제풀이 문제 H-Index 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def solution(citations): answer = 0 left = 0 right = 10000 while left <= right: cnt = 0 mid = (left+right)//2 for i in citations: if i >= mid: cnt += 1 if cnt < mid: right = mid -1 else: left = mid +1 answer = (left+right)//2 return answer 가능한 값 중 최솟값 혹은 최댓값을 찾는 문제는 이제 자연스레 이진탐색이 떠오른다. ...

2024년 5월 13일 · 1 분 · 배준수

파이썬 알고리즘 : 덧칠하기

2024년 5월 10일 알고리즘 문제풀이 문제 덧칠하기 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 from heapq import heappop, heappush def solution(n, m, section): answer = 0 arr = [] for x in section: heappush(arr,x) idx = heappop(arr) end = idx + m -1 cnt = 1 while arr: if arr[0] <= end: heappop(arr) continue else: idx = heappop(arr) end = idx + m -1 cnt += 1 return cnt 최소힙을 사용하는 아이디어가 금방 떠올라서 쉽게 풀었다. ...

2024년 5월 10일 · 1 분 · 배준수

파이썬 알고리즘 : 괄호 변환

2024년 5월 7일 알고리즘 문제풀이 문제 괄호 변환 난이도 Lv.2 코드 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 from collections import Counter # 균형잡힌 괄후 문자열인지 확인하는 함수 def check_balance(k): arr = Counter(k) if arr['('] == arr[')']: return True return False # 올바른 괄호 문자열인지 확인하는 함수 def check_right(k): while '()' in k: arr = list(k) for i in range(len(k)-1): if arr[i] == '(' and arr[i+1] == ')': arr[i] = arr[i+1] = '' k = ''.join(arr) if not len(k): return True return False # 변환과정을 나타내는 함수 def process(x): # 1단계 if not x: return x # 2단계 for i in range(1,len(x)+1): tmp = x[:i] if check_balance(tmp): break u = tmp v = x[i:] # 3단계 if check_right(u): # 3-1단계 return u + process(v) # 4단계 else: # 4-1, 4-2, 4-3단계 new = '(' + process(v) + ')' arr = [] # 4-4단계 for i in range(1,len(u)-1): if u[i] == '(': arr.append(')') else: arr.append('(') new += ''.join(arr) # 4-5단계 return new def solution(p): answer = '' u = '' answer = process(p) return answer 카카오는 시키는대로 하면 된다. ...

2024년 5월 7일 · 2 분 · 배준수

파이썬 알고리즘 : 소수 만들기

2024년 5월 3일 알고리즘 문제풀이 문제 소수 만들기 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from itertools import combinations def solution(nums): answer = 0 board = [False for _ in range(3001)] board[2] = board[3] = True for num in range(4,3001): for i in range(2,num): if not num%i: break else: board[num] = True nCr = list(combinations(nums,3)) for i in nCr: if board[sum(i)]: answer += 1 return answer 나올 수 있는 모든 범위의 소수 여부를 판단한 후 문제를 풀었다. 이걸 에라토스테네스의 체라고 한단다. ...

2024년 5월 3일 · 1 분 · 배준수

파이썬 알고리즘 : 메뉴 리뉴얼

2024년 4월 29일 알고리즘 문제풀이 문제 메뉴 리뉴얼 난이도 Lv. 2 코드 1차시도 85/100 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 def solution(orders, course): answer = [] arr_set = set() for i in range(len(orders)): for j in range(len(orders[i])): arr_set.add(orders[i][j]) orders[i] = set(orders[i]) for n in course: arr = [] cnt = 2 nCr = itertools.combinations(arr_set,n) for x in list(nCr): tmp = 0 for p in orders: if set(x) <= p: tmp += 1 k = sorted(x) word = ''.join(k) if tmp > cnt: cnt = tmp arr = [word] elif tmp == cnt: arr.append(word) answer += arr answer.sort() return answer 반복문을 남발하여서 그런지, 4개 정도의 테스트케이스가 시간초과로 통과하지 못했다. ...

2024년 4월 29일 · 1 분 · 배준수

파이썬 알고리즘 : 기능개발

2024년 4월 26일 알고리즘 문제풀이 문제 기능개발 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def solution(progresses, speeds): answer = [] idx = 0 while idx < len(progresses): cnt = 0 for i in range(len(progresses)): progresses[i] += speeds[i] while idx < len(progresses): if progresses[idx] >= 100: idx += 1 cnt += 1 else: break if cnt: answer.append(cnt) return answer 가장 앞에 있는 기능이 100이 될때까지 모든 값들의 크기를 늘렸다. 이후 첫번 째 기능 개발이 완료되었을 때 100이 넘는 것들을 같이 처리해주고 갯수를 세주었다. ...

2024년 4월 26일 · 1 분 · 배준수

파이썬 알고리즘 : 소수 찾기

2024년 4월 25일 알고리즘 문제풀이 문제 소수 찾기 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def solution(n): answer = 0 for num in range(2,n+1): if num == 2 or num == 3: answer += 1 continue if not num%2: continue for i in range(2,int(num**(0.5))+1): if not num%i: break else: answer += 1 return answer

2024년 4월 25일 · 1 분 · 배준수

파이썬 알고리즘 : 주식가격

2024년 4월 23일 알고리즘 문제풀이 문제 주식가격 난이도 Lv. 2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 def solution(prices): answer = [0 for _ in range(len(prices))] stk = [] for i in range(len(prices)): price = prices[i] if not stk: stk.append([price,i]) continue while stk: now_price, now_time = stk[-1] if price < now_price: answer[now_time] = (i-now_time) stk.pop() else: break stk.append([price,i]) if stk: while stk: p,t = stk.pop() answer[t] = len(prices)-1-t return answer

2024년 4월 23일 · 1 분 · 배준수

파이썬 알고리즘 : 데이터 분석

2024년 4월 19일 알고리즘 문제풀이 문제 데이터 분석 난이도 Lv. 1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 def solution(data, ext, val_ext, sort_by): answer = [] for x in data: arr = dict() arr["code"] = x[0] arr["date"] = x[1] arr["maximum"] = x[2] arr["remain"] = x[3] if arr[ext] < val_ext: answer.append(x) if sort_by == 'code': idx = 0 elif sort_by == 'date': idx = 1 elif sort_by == 'maximum': idx = 2 else: idx = 3 answer.sort(key = lambda x: (x[idx])) return answer

2024년 4월 19일 · 1 분 · 배준수