반응형

전체 글 295

[카카오] 2020 신입 개발자 블라인드 채용 1차 코딩 - 가사 검색

정확성과 효율성 테스트를 모두 통과해야 합니다. 정확성 테스트는 쉽게 통과할 수 있지만 효율성은 끝내 통과하지 못하고 다른 코드들을 참조했습니다. 결론적으로 Trie 자료 구조에 대해서 알고 있어야 수월하게 풀이가 가능한 문제입니다. Trie 자료 구조에 대해선 따로 정리하도록 하겠습니다. 아래 코드는 유튜브 풀이를 참조한 코드 입니다. 설명을 차근차근 해주셔서 참조하시면 많은 도움이 될 듯 합니다. class Trie: def __init__(self): self.node = dict() self.count = 0 def insert(self, char): curr = self for s in char: curr.count += 1 if s not in curr.node: curr.node[s] = T..

카테고리 없음 2021.08.30

[카카오] 2020 신입 개발자 블라인드 채용 1차 코딩 - 괄호 변환

올바른 괄호 / 균형잡힌 괄호 2가지를 체크하는 함수를 각각 구현한 뒤 문제에서 설명하는 변환 과정 1 ~ 4를 구현 하면 됩니다. 이때 재귀 부분만 신경쓰면 큰 어려움은 없을 듯 합니다. def isbalanced(s): flag = 0 for c in s: if c == '(': flag += 1 elif c == ')': flag -= 1 if flag == 0: return True else: return False def iscorrect(s): stack = [] for c in s: if len(stack) == 0: stack.append(c) else: if c == '(': stack.append(c) elif c == ')': if len(stack) == 0 or stack.pop(..

[카카오] 2020 신입 개발자 블라인드 채용 1차 코딩 - 문자열 압축

그냥 무식하게 1개 단위 ~ n-1개 단위 압축 경우의 수를 모두 계산하고 그 중 가장 작은 값은 반환하는 방법으로 해결했습니다. 좀 더 깔끔하게 해결한 코드가 있으면 정리해서 업데이트 하겠습니다.. import math def solution(s): if len(s) == 1: return 1 elif len(set([c for c in s])) == 1: count = len(s) return len(str(count)) + 1 else: answer = len(s) for i in range(1, len(s)): idx = i length = 0 prev = s[:i] count = 1 for j in range(math.ceil(len(s) / i) - 1): curr = s[idx:idx+i] ..

[python] pass, continue, break 활용법

안녕하세요, 오늘은 정말 간단한 python에서 pass, continue, break 문법 각각의 역할과 활용법에 대해서 정리해보겠습니다. 쉽게 정리하자면, pass : 아무 동작도 하지 않습니다. 반복문에서 아무런 영향을 끼치지 않습니다. continue : 반복문에서 다음 loop로 건너뛰면서 loop는 지속됩니다. break : 반복문을 멈추고 loop 밖으로 나갑니다. 말로 설명하는 것보다 쉽게 이해할 수 있도록 아래 예시로 정리하겠습니다. pass는 왼쪽의 결과에서 볼 수 있듯이 코드에 아무런 영향을 끼치지 않습니다. 따라서 pass는 주로 조건문에서 별다른 행동이 필요하지 않을 때, 또는 class 생성시 초기에 별다른 값이 없을때 전체 코드 동작을 확인하기 위해 임시적으로 활용하기도 합니다..

[연결 리스트] 두 수의 덧셈

* leetcode 2. Add Two Numbers Q. 역순으로 저장된 연결 리스트의 숫자를 더하라 # 입력 (2 -> 4 -> 3) + (5 -> 6 -> 4) # 출력 7 -> 0 -> 8 # 설명 342 + 465 = 807 풀이. 전가산기 구현 def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: root = head = ListNode(0) carry = 0 while l1 or l2 or carry: sum = 0 # 두 입력값의 합 계산 if l1: sum += l1.val l1 = l1.next if l2: sum += l2.val l2 = l2.next # 몫(올림)과 나머지(값) 계산 carry, val = divmod(..

Linux Two-Factor Authentication 적용하기

Two-factor authentication (2FA)는 Multi-factor authentication의 한 종류로 서버 접속을 위해서 기존에 사용하던 password 이외에 추가적인 OTP 또는 verification code를 요구하여 서버 보안을 더욱 강화하는 방법입니다. 5분만에! 간단하게 설정하는 방법에 대해서 알아보도록 하겠습니다. Step 1 - Google PAM 모듈 설치 일단, 서버에 Google PAM 모듈을 설치해야합니다. 이 모듈은 사용자가 TOTP를 사용하여 Linux 시스템에서 인증할 수 있게 해줍니다. # 먼저 Ubuntu repositories를 업데이트하고, $ sudo apt-get update # google pam을 설치합니다. $ sudo apt-get ins..

프로그래밍 2021.02.15

[연결 리스트] 역순 연결 리스트

* leetcode 206. Reverse Linked List Q. 연결 리스트를 뒤집어라. # 입력 1->2->3->4->5->Null # 출력 5->4->3->2->1->Null 풀이 1. 반복 구조로 뒤집기 def reverseList(head: ListNode) -> ListNode: node, prev = head, None # node.next를 이전 prev 리스트로 계속 연결하면 뒤집어진 연결 리스트를 얻을 수 있다. while node: next, node.next = node.next, prev prev, node = node, next return prev ### 초기화 node = 1->2->3->4->5->None prev = None while [1] next = 2(->3->..

[연결 리스트] 두 정렬 리스트의 병합

* leetcode 21. Merge Two Sorted Lists Q. 정렬되어 있는 두 연결 리스트를 합쳐라 # 입력 1->2->4, 1->3->4 # 출력 1->1->2->3->4->4 풀이 1. 재귀 구조로 연결 def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode: # 작은 값이 왼쪽에 오게 if (not l1) or (l2 and l1.val > l2.val): l1, l2 = l2, l1 # next는 그 다음 값이 엮이도록 재귀 호출 if l1: l1.next = mergeTwoLists(l1.next, l2) return l1

[연결 리스트] 팰린드롬 연결 리스트

* leetcode 234. Palindrome Linked List Q. 연결리스트가 팰린드롬 구조인지 판별하라. # 입력 1->2 # 출력 false # 입력 1->2->2->1 # 출력 true 풀이 1. 리스트 변환 # 연결 리스트를 파이썬의 리스트로 변환시켜 풀이 def isPalindrome(head: ListNode) -> bool: q: List = [] if not head: return True node = head # 리스트 변환 while node is not None: q.append(node.val) node = node.next # 판별 while len(q) > 1: if q.pop(0) != q.pop(): # 인덱스를 지정하여 처음과 끝 값을 비교 return False ..

[배열] 주식을 사고팔기 가장 좋은 시점

* leetcode 121. Best Time to Buy and Sell Stock Q. 한 번의 거래로 낼 수 있는 최대 이익을 산출하라. # 입력 [7, 1, 5, 3, 6, 4] # 출력 5 # 1일 때 사서 6일 때 팔면 최대 5의 이익을 얻는다. 풀이 1. 브루트 포스로 계산 # O(n^2)로 사고 팔고를 반복하여 최대 이익을 구한다. def maxProfit(prices: List[int]) -> int: max_price = 0 for i, price in enumerate(prices): for j in range(i, len(prices)): max_price = max(prices[j] - price, max_price) return max_price 이 풀이법은 시간 복잡도가 O(n..

반응형