목록알고리즘 문제 (44)
배고픈 개발자 이야기
귀찮 나중에 def solution(N, stages): answer = [] temp = dict() stage_len = len(stages) count_sum = 0 for num in range(1, N + 1): num_cnt = 0 if stage_len - count_sum > 0: num_cnt = stages.count(num) failed = num_cnt / (stage_len - count_sum) #[stages.remove(num) for _ in range(num_cnt)] else: failed = .0 temp[num] = failed count_sum += num_cnt #def f2(x): # return x[1] #sorted_failed = sorted(temp.it..
이 문제는 주어진 숫자열 중 3가지 숫자의 합을, 그 숫자가 소수(prime number)인지 판별하는 문제로 2가지 로직만 완성하면 된다. 1. 3가지 숫자를 뽑는 경우의 수를 구현하는것 경우의 수는 아래의 링크를 참조하여 순서는 상관없을 때 중복을 허용하지 않는 경우의 수를 구했다. https://wikidocs.net/23278 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net 2. prime number를 효과적으로 판별하는 방법 1. 2부터 순차적으로 전체 숫자를 구하는 방법 2. 2부터 중간값까지 구하는 방법 3. 2부터 최대공약수 root(prime number)까지 구하는 방법 중 3번으로 풀었다. from itertools import combinations def..
왼손 엄지와 오른손 엄지로 입력된 번호를 어떻게 누르는지 문자열로 반환하는 문제이다. 각 키패드별로 좌표를 생성하고, 초기값을 선언한다. 그리고 규칙에 맞게 왼쪽 버튼은 왼손, 오른손 버튼일때는 오른손으로 입력을 하며 가운데 번호일때만 거리를 구하여 어떤손으로 누를지 정한다, 거리가 같으면 어느손잡이냐에 따라 정하면 끝이다. def distance(coord_1, coord_2): return abs(coord_1[0]-coord_2[0]) + abs(coord_1[1]-coord_2[1]) def solution(numbers, hand): answer = '' num_coord = { '1' : [0, 3], '2' : [1, 3], '3' : [2, 3], '4' : [0, 2], '5' : [1,..
Medium 난이도 Acceptence 60.6% 문제 입력으로 주어진 단어 리스트 중에 철자를 바꿨을 때 동일한 문자를 리스트로 묶어서 반환하는 문제이다. 주어진 입렵값의 범위가 크기 때문에 효율적으로 풀어야 좋을것으로 보이나직관적으로 풀이해보았다. -풀이-단어의 철자를 각각 아스키코드로 변환한 후, 정렬 및 중복 제거를 한다.중복제거한 단어열별로 각각 리스트별로 묶는다 (원본 인덱스 사용) class Solution(object): def groupAnagrams(self, strs): """ :type strs: List[str] :rtype: List[List[str]] """ if len(strs)
Medium 난이도 Acceptence 36.2% 문제 끝에서 n번째 노드를 제거하는 문제, 리스트로 값을 바꿔 원하는 노드를 지운 후 다시 노드로 바꿔 문제를 풀었다. 문제에서는 one pass로 풀 수 있냐고 한것에 더 맞는 정답을 위해선 list node class의 remove함수를 따로 구현해야 할것으로 보인다. class Solution(object): def removeNthFromEnd(self, head, n): """ :type head: ListNode :type n: int :rtype: ListNode """ tempList = [] while head is not None: tempList.append(head.val) head = head.next del tempList[len..
Medium 난이도 Acceptence 50.1% 문제 문재는 핸드폰 번호판에 매핑된 문자를 사용하여 만들 수 있는 모든 문자 조합을 구하는 문제로 먼저, 각 번호를 key 매핑문자를 value로 저장 후, 입력으로 들어온 숫자의 길이에 맞게 순서대로 조합을 생성하여 반환한다. class Solution(object): def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ mapNum = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'} l = len(digits) result = [] if l == 0: retu..
Medium 난이도 Acceptence 66.5% 문제 이진트리를 inorder 순회한 값을 리스트로 반환하는 문제 아래와 같이 left, root right 노드를 재귀로 순회하도록 구성하였고 왼쪽 아래의 노드부터 inorder로 순회하도록 한다. 여기서 extend라는 함수에 대해 찾아봤는데 재귀함수로 값을 더할 경우 extend를 사용, append사용시 원하는대로 값이 더해지지 않는 경우가 많다. class Solution(object): def traverseNode(self, curNode): result = [] if curNode is None: return result if curNode.left is not None: result.extend(self.traverseNode(curNod..
Medium 난이도 Acceptence 35.9% 문제 입력된 listnode 두개는 10진수의 숫자의 역순으로 원래의 두값을 더한 후 다시 역순으로 반환하면 되는 문제다. 더한값 sum과 carry값 및 반환용 dummy로 listnode 얕은복사값 사용 값은 두값 또는 carry값이 있을 경우 계속 계산한다. 해당 자리수의 값을 sum한 후 10의 몫을 carry값, 나머지를 해당자리수의 값으로 계산한다. class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ c = 0 s = 0 dummy = ListNode() curr = dummy whi..