일반 프로그래밍/알고리즘
-
파이썬 알고리즘 - 오픈 채팅방일반 프로그래밍/알고리즘 2022. 5. 19. 18:23
문제 : https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 나의 풀이 def solution(record): answer = [] action = [] user = {} for i in record: #구분로직1 try : command = i.split()[0] uid = i.split()[1] name = i.split()[2] action.append(command) action.append(uid) us..
-
선택 정렬 파이썬으로 구현하기일반 프로그래밍/알고리즘 2022. 5. 15. 23:14
선택 정렬 어떠한 리스트가 주어졌을때, 인접한 두 수를 비교하여 작은 수를 앞 인덱스로 보내어 오름차순으로 정렬하거나, 큰 수를 보내어 내림차순으로 정렬하는 알고리즘이다. 그중 오름차순을 구현하는 코드를 작성하였다. def selectionSort(nums): for i in range(len(nums) - 1): min_idx = i for j in range(i + 1, len(nums)): if nums[j] < nums[min_idx]: min_idx = j nums[i], nums[min_idx] = nums[min_idx], nums[i] return(nums) nums라는 수가 담긴 리스트를 받는다. 0번째 인덱스부터 시작하여 n번째 인덱스와 n+1번째 인덱스를 비교하고 만약에 n번째 인덱스..
-
파이썬 알고리즘 - 연속된 값의 가장 큰 합, 이진 탐색일반 프로그래밍/알고리즘 2022. 5. 8. 22:28
문제 19 : 숫자로 이루어진 리스트 nums를 인자로 주면, 연속적인 숫자를 더했을 때 가장 큰 값을 반환하라. 모범 답안 def maxSubArray(nums): for x in range(1,len(nums)): nums[x] = max(nums[x], nums[x-1]+nums[x]) return max(nums) 문제 20 : 오름차순인 숫자 nums 배열과 찾아야할 target을 인자로 주면, target이 몇 번째 index인지 반환하라. 나의 답 def search(nums, target): l, r = 0, len(nums) - 1 while l target: r = mid - 1 else: return mid return -1
-
파이썬 알고리즘 - 주식 가격, 같은 알파벳 묶기일반 프로그래밍/알고리즘 2022. 5. 8. 20:21
문제 17 : 배열로 매일의 주식 가격이 주어지고, 한번만 사고팔수 있다고 할 때, 가장 큰 이익을 구하라. 나의 답 def maxProfit(prices): list = [] for i in range(len(prices)): for j in range(i+1,len(prices)) : list.append(prices[j]-prices[i]) return 0 if max(list) < 0 else max(list) j의 값을 i+1로 설정하여, 뒤에 날에 사서 앞의 날 가격에 파는 결과를 제외 하였고, return에 조건을 걸어 이득이 마이너스일때는 0을 반환하게 하였다. 문제 18 : input이 주어졌을 때, 같은 알파벳으로 이루어진 단어끼리 묶어라. 모범 답안 def groupAnagrams(s..
-
파이썬 알고리즘 - 합이 가장 적은경로 찾기, 0 배열끝으로 이동시키기일반 프로그래밍/알고리즘 2022. 5. 1. 23:32
문제 13 : 양수로 이루어진 m x n 그리드를 인자로 준다. 상단 왼쪽에서 시작하여, 하단 오른쪽까지 가는 길의 요소를 다 더했을 때,가장 작은 합을 찾아서 return 하라. 모범 답안 def minPathSum(grid): m = len(grid) n = len(grid[0]) ### 1 for i in range(1, n): grid[0][i] += grid[0][i-1] for i in range(1, m): grid[i][0] += grid[i-1][0] ### 2 for i in range(1, m): for j in range(1, n): grid[i][j] += min(grid[i-1][j], grid[i][j-1]) return grid[-1][-1] 문제 14 : 주어진 숫자 배열에..
-
파이썬 알고리즘 - 복소수 곱 구하기, 배열 뒤집기일반 프로그래밍/알고리즘 2022. 4. 26. 21:27
문제 11 : 복소수 a,b가 주어졌을때 a*b를 반환하라. 복소수의 형식은 x + yi 다. 나의 답 def complex_number_multiply(a, b): num1, bok1 = a.split('+') num2, bok2 = b.split('+') num1 = int(num1) num2 = int(num2) bok1 = int(bok1.replace('i','')) bok2 = int(bok2.replace('i','')) intg = str((num1*num2) - (bok1*bok2)) bok3 = str((bok1*num2) + (bok2*num1)) answer = intg+"+"+bok3+"i" return(answer) +를 기준으로 문자열에 split을 하여 정수 부분과 복소수의 ..
-
파이썬 알고리즘 - 자주 등장한 숫자구하기, 넓이 구하기일반 프로그래밍/알고리즘 2022. 4. 22. 18:58
문제 9 : nums는 숫자로 이루어진 배열이다. 가장 자주 등장한 숫자들을 k개수만큼 반환하라. 예를들어 nums가 [1,1,1,2,2,3]이고 k가 2면 반환값은 [1,2]다. 나의 답 def top_k(nums, k): numm = set(nums) dic = {i : "" for i in numm} answer = [] for d in numm: dic[d] = nums.count(d) for f in range(k): max_key = max(dic, key=dic.get) answer.append(max_key) dic.pop(max_key) return answer 먼저 set()을 이용해 중복을 제거한 nums의 숫자들을 dic의 key로 하여 딕셔너리를 생성하였다. 그리고 딕셔너리의 va..