전체 글 117

[문자열 조작] 그룹 애너그램

* leetcode 49. Group Anagrams Q. 문자열 배열을 받아 애너그램 단위로 그룹핑하라. # 입력 ["eat", "tea", "tan", "ate", "nat", "bat"] # 출력 [ ["ate", "eat", "tea"], ["nat", "tan"], ["bat"] ] 풀이 1. 정렬하여 딕셔너리에 추가 def groupAnagrams(self, strs: List[str]) -> List[List[str]]: # defaultdict를 사용하면 항상 디폴트 키를 생성해주기 때문에 KetError를 피할 수 있다. anagrams = collections.defaultdict(list) for word in strs: # sorted로 정렬한 문자열을 키값으로 사용하기 위해 joi..

[문자열 조작] 가장 흔한 단어

* leetcode 819. Most Common Word Q. 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉽표 등) 또한 무시한다. # 입력 paragraph = 'Bob hit a ball, the hit BALL flew far after it was hit.' banned = ["hit"] # 출력 "ball" 풀이 1. 리스트 컴프리헨션, Counter 객체 사용 def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: # 정규식을 사용한 전처리 # \w는 단어 문자(word character를 뜻하며, ^는 not을 의미하며 따라서 paragraph의 모든 # 단어 ..

[문자열 조작] 로그 파일 재정렬

* leetcode 937. Reorder Log Files Q. 로그를 재정렬하라. 기준은 다음과 같다. 로그의 가장 앞 부분은 식별자다. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다. 숫자 로그는 입력 순서대로 한다. # 입력 logs = ["dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"] # 출력 ["let1 art can", "let3 art zero", "let2 own kit dig", "dig1 8 1 5 1", "dig2 3 6"] 풀이 1. 람다와 + 연산자를 이용 def reorderLogFiles(self, l..

[문자열 조작] 문자열 뒤집기

Q. 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라. """예제 1""" # 입력 ["h", "e", "l", "l", "o"] # 출력 ["o", "l", "l", "e", "h"] """예제 2""" # 입력 ["H", "a", "n", "n", "a", "h"] # 출력 ["h", "a", "n", "n", "a", "H"] 풀이 1. 투 포인터를 이용한 스왑 # 리턴 없이 리스트 내부를 직접 조작하라는 제약사항이 있으므로 아래와 같이 두개의 포인터로 내부를 # 스왑하는 방식으로 풀이가 가능하다. def reverseString(self, s: List[str]) -> None: left, right = 0, len(s) - 1 while left..

[문자열 조작] 유효한 팰린드롬

Q. 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다. 예제 1 # 입력 "A man, a plan, a canal: Panama" # 출력 true 예제 2 # 입력 "race a car" # 출력 false 풀이 1. 리스트로 변환 def isPalindrome(self, s: str) -> bool: """ 전처리 """ strs = [] for char in s: if char.isalnum(): # 영문자, 숫자만을 대상 strs.append(char.lower()) # 대소문자 구문 없으므로 소문자로 변환 # -> strs = ['a', 'm', 'a', 'n', 'a', 'p', 'l', 'a', 'n', 'a', # 'c', 'a', 'n..

[Data Scientist - Day 2] Probability

목차 Theoretical probability Sample spaces Conditional probability and independence Theoretical probability 동전을 던져서(experiment) 앞면이 나올 확률(P) \(P(H) =?\) \(\frac{num-of-possibility-that-meets-by-condition}{num-of-equally-likely-possibility}\) 즉, \(P(H) = 1/2 = 0.5\) 아래는 그래프는 python을 활용해서 2가지 실험을 총 50,000번 반복했을 때의 확률입니다. 동전 던지기는 50%로, 주사위 던지기는 16.6%로 점점 수렴하는 것을 쉽게 확인할 수 있습니다. Monte Hall Problem 몬티 홀..

[논문 리뷰] EfficientNet: Rethinking Model Scaling For Convolutional Neural Networks

이번 포스팅에서는 2019년에 발표되어 현재까지 Image Classification Task에 최고의 성능을 보여주고 있는 EfficientNet이라는 모델 구조에 대해서 간략하게 리뷰하겠습니다. AlexNet의 등장 이후 Image Classification 분야에서 모델의 성능을 향상시키기 위해 CNN 모델 구조들의 몸집(?)을 키우는 방향의 시도가 지속적으로 이루어져 왔습니다. 이러한 시도들에 의해 꾸준히 모델 성능이 성장하였고, 특히 ResNet은 100개가 넘는 깊이의 구조를 사용함으로써 기존 CNN의 성능을 비약적으로 향상시키는 대표적인 모델로 알려졌습니다. 여기서 우리는 두 가지를 고민 해볼 수 있습니다. 첫째, 과연 모델의 몸집을 키우는 방식으로 CNN의 성능을 얼마나 향상시킬 수 있는가..

논문 리뷰 2021.01.04

[Data Scientist - Day 1] Descriptive Statistics

Descriptive Statistics (기술 통계학) 통계? 통계란, 데이터를 수집하고 분석하여 모집단을 대표할 수 있는 샘플을 추론하는 학문입니다. 즉, 통계는 모집단을 예측하기 위해 데이터를 해석하는 학문이라고 할 수 있습니다. 통계의 분야 - Descriptive Statistics: 데이터를 측정하고 설명하는 통계 - Inferential Statistics: 모집단에서 가져온 무작위 표본으로 모집단을 설명하고 추론하는 통계 기술 통계 데이터를 더 쉽게 이해할 수 있도록 평균, 중앙값과 같은 특정 숫자로 현재의 데이터를 요약하는 것 입니다. 현재 사용 가능한 데이터 이외의 일반화나 추론은 포함하지 않습니다. 일반적으로 사용 되는 측정치 - Measures of Central Tendency (..

[1-2] 파이썬

리스트 컴프리헨션 "홀수인 경우 2를 곱해 출력하라"는 조건에 대해서 List Comprehension을 사용하면 다음과 같이 간단히 코딩할 수 있다. [n * 2 for n in range(1, 10+1) if n % 2 == 1] List Comprehension을 사용하지 않을 경우 코드가 훨씬 길고 a라는 별도의 리스트 변수 또한 필요해진다. a = [] for n in range(1, 10 + 1): if n & 2: a.append(n * 2) print(a) 제너레이터 모든 변수를 메모리에 생성하지 않고, 생성 조건만을 가져 메모리에 대한 효율성을 얻을 수 있다. a = [n for n in range(1000000)] # List b = range(1000000) # Generator 위 ..

[1-1] 코딩 인터뷰

코딩 인터뷰를 위한 온라인 테스트 플랫폼 해커랭크 (https://www.hackerrank.com) 코딜리티 (https://www.codility.com) 리모트인터뷰 (https://www.remoteinterview.io) 프로그래머스 (https://programmers.co.kr) 백준 (https://www.acmicpc.net/) 리트코드 (https://leetcode.com/) 프로젝트 오일러 (https://projecteuler.net) 온라인 코딩 테스트의 사전 준비사항 - 코드 스니펫 준비하기 (GitHub Gist, https://gist.github.com/)