본문 바로가기

Algorithm48

[프로그래머스] H-index 파이썬 def solution(citations): if min(citations) >= len(citations): return len(citations) answer = [] h_list = list(range(min(citations), max(citations)+1)) for h in h_list: more = [c for c in citations if c >= h] less = [c for c in citations if c = h and len(less) = l-i: return l-i return 0 pythonic한 풀이 def solution(citations): citations.sort(reverse=True) answer = max(map(min, enumerate(citations, s.. 2021. 3. 11.
[프로그래머스] 전화번호 목록 파이썬 Hash 테스트 케이스가 바뀌기도 했고 해쉬 카테고리인테 해쉬가 어떻게 쓰이는지 궁금하던 찰나 발견한 블로그 파이썬 의 dictionary 자료형이 hash table 이다. def solution(phone_book): answer = True hash_map = {} # 등장한 숫자들을 count 딕셔너리로 만듦 for phone_number in phone_book: hash_map[phone_number] = 1 # 다시 숫자들을 꺼낸뒤 for phone_number in phone_book: temp = "" for number in phone_number: #숫자 하나씩 뜯어보기 temp += number #딕셔너리 키로 같은게 있지만! 전체 숫자는 다른 경우! if temp in hash_map an.. 2021. 3. 11.
[프로그래머스] 가장 큰 수 파이썬 정렬 import functools def comparator(a,b): t1 = a+b t2 = b+a return (int(t1) > int(t2)) - (int(t1) < int(t2)) # t1이 크다면 1 // t2가 크다면 -1 // 같으면 0 def solution(numbers): n = [str(x) for x in numbers] n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True) answer = str(int(''.join(n))) return answer comparator 이건 JS에서도 비슷하게 했던걸로 기억 (sort에서 arrow function으로) cmp_to_key는 처음보는 함수 python2 에서 사용되.. 2021. 3. 11.
[프로그래머스] 소수 찾기 파이썬 from itertools import permutations import math def check(n): k = math.sqrt(n) if n < 2: return False for i in range(2, int(k)+1): if n % i == 0: return False return True def solution(numbers): answer = [] for k in range(1, len(numbers)+1): perlist = list(map(''.join, permutations(list(numbers), k))) for i in list(set(perlist)): if check(int(i)): answer.append(int(i)) answer = len(set(answer)) re.. 2021. 3. 10.
[Python] Heap import heapq def my_heap_example(L, T): """ 주어진 비커의 리스트를 힙 구조로 변환 """ heapq.heapify(L) result = 0 while len(L) >= 2 : #IndexError 방지 """ 힙에서 최솟값을 가져옴 """ min_ = heapq.heappop(L) if min_ >= T: # 액체의 최솟값이 T보다 크다는 조건 만족(종료) print("-"*40, "\nresult:", result) return result else: # 두 번째로 작은 값 가져와서 합친 값을 힙에 삽입 min_2 = heapq.heappop(L) heapq.heappush(L, min_ + min_2*2) result += 1 print("step{}: [{},{}.. 2021. 3. 10.
[프로그래머스] 조이스틱 다른 사람의 풀이 def solution(name): change = [min(ord(i) - ord("A"), ord("Z")-ord(i)+1) for i in name] print(change) idx = 0 answer = 0 while True: answer += change[idx] change[idx] = 0 if sum(change) == 0: return answer # until sum of change = 0 left, right = 1, 1 while change[idx - left] == 0: left += 1 while change[idx + right] == 0: right += 1 answer += left if left < right else right idx += -left.. 2021. 3. 5.
[프로그래머스] 큰 수 만들기 다른 사람의 풀이 def solution(number, k): # stack에 입력값을 순서대로 삽입 stack = [number[0]] for num in number[1:]: # 들어오는 값이 stack 값보다 크면, 기존의 값을 제거하고 새로운 값으로 바꿈 # 참고 : len(stack) > 0 == stack while len(stack) > 0 and stack[-1] 0: # 값을 한개 빼서 k는 1이 제거 k -= 1 # 내부의 값을 제거 stack.pop() # 새로운 값을 삽입 stack.append(num) # 만일 충분히 제거하지 못했으면 남은 부분은 단순하게 삭제 # 이렇게 해도 되는 이유는 이미 큰 수부터 앞에서 채워넣었기 때문 if k != 0: stac.. 2021. 3. 4.
[프로그래머스] 삼각 달팽이 import itertools # 달팽이가 움직인 좌표 def get_next(x, y, d): DELTAS = {'up': (-1, -1), 'down': (1, 0), 'right': (0, 1)} dx, dy = DELTAS[d][0], DELTAS[d][1] nx, ny = x + dx, y + dy return nx, ny # 달팽이가 범위 안에 있는지 밖에 있는지 확인 def check_turn(nx, ny, n, snail): return nx = n or ny > nx or snail[nx][ny] != 0 def solution(n): NEXT = {"up" : "down", "down" : "right", "right" : "up"} snail = [[0] * i f.. 2021. 3. 4.
[프로그래머스] 문자열 압축 파이썬 다른 사람의 풀이 def solution(s): length = [] result = "" if len(s) == 1: return 1 for cut in range(1, len(s) // 2 + 1): count = 1 tempStr = s[:cut] for i in range(cut, len(s), cut): if s[i:i+cut] == tempStr: count += 1 else: if count == 1: count = "" result += str(count) + tempStr tempStr = s[i:i+cut] count = 1 if count == 1: count = "" result += str(count) + tempStr length.append(len(result)) result .. 2021. 3. 3.