파이썬 알고리즘 : two-sum

2024년 5월 9일 알고리즘 문제풀이 문제 two-sum 난이도 Easy 코드 1차시도 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 class Solution: def twoSum(self, nums, target: int): board = dict() idx_arr = dict() answer = [] for i in range(len(nums)): if nums[i] not in board: board[nums[i]] = 1 else: board[nums[i]] += 1 for i in range(len(nums)): if nums[i] not in idx_arr: idx_arr[nums[i]] = [i] else: idx_arr[nums[i]].append(i) for i in range(-target,target+1,1): if i in board and target-i in board: if i != target-i: answer = [idx_arr[i][0],idx_arr[target-i][0]] break else: if board[i] >= 2: answer = [idx_arr[i][0], idx_arr[i][1]] break return answer 다 조회하면 시간이 초과될 것 같아, dictionary를 이용하려 했다. target이 0일 떈 조합을 찾는 반복문이 제대로 작동하지 않아 오답처리되었다. ...

2024년 5월 9일 · 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 분 · 배준수

파이썬 알고리즘 : 별 찍기 - 10

2024년 5월 6일 알고리즘 문제풀이 문제 별 찍기 - 10 난이도 골드 5 코드 길이가 3인 정사각형에서 가운데만 비어있는 형태로 반복하여 쌓이게 된다. 정사각형을 9등분하여 가운데에만 제외하고 8개를 복사해준다고 생각했다. 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 import sys n = int(sys.stdin.readline()) board = [[' ' for _ in range(n)] for _ in range(n)] # 재귀함수 정의 def main(num:int): # 사각형이 최소크기면 if num == 3: for i in range(3): for j in range(3): # 가운데(좌표 1,1)를 제외하고 *을 그려준다. if i != 1 or j != 1: board[i][j] = '*' return # 3등분하여 재귀를 반복 p = num//3 main(p) for i in range(0, num, p): for j in range(0, num, p): # 가운데가 아닐 때를 제외하곤 똑같은 모양을 넣어준다. if i != p or j != p: for x in range(p): board[i+x][j:j+p] = board[x][:p] # 함수 실행 main(n) # 결과 출력 for i in range(n): for j in range(n): print(board[i][j], end='') print() 출처 : TaxFree ...

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

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

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 분 · 배준수

파이썬 알고리즘 : Build Array from Permutation

2024년 5월 2일 알고리즘 문제풀이 문제 Build Array from Permutation 난이도 Easy 코드 1 2 3 4 5 6 class Solution: def buildArray(self, nums: List[int]) -> List[int]: ans = [0 for _ in range(len(nums))] for i in range(len(nums)): ans[i] = nums[nums[i]] return ans

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

파이썬 알고리즘 : 코코넛 그 두 번째 이야기

2024년 4월 30일 알고리즘 문제풀이 문제 코코넛 그 두 번째 이야기 난이도 실버 5 코드 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 import sys def check(num: int): cnt = 1 for i in range(2,num): tmp = num for _ in range(i): tmp -= 1 tmp *= (i-1) if not tmp%i: tmp //= i else: break else: cnt = i return cnt while True: n = int(sys.stdin.readline()) if n == -1: break tmp = check(n) if tmp < 2: print(f"{n} coconuts, no solution") else: print(f"{n} coconuts, {tmp} people and 1 monkey") 문제에서 처리하는 순서대로 그대로 구현했다. 약간 헷갈렸던건, 예시에선 5명이였는데 인원수대로 처리하면 된다는 걸 생각못하고 무조건 5명이라 생각했다.. ...

2024년 4월 30일 · 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 분 · 배준수