본문 바로가기

Every

(139)
Programmers Lv. 1 "삼총사" 으음~ 각 학생한테 매겨진 숫자가 있고 주어진 number중 3명을 골라 그 합이 0이 되는 경우의 수를 반환하는 문제이다. 즉, 주어진 배열 number에서 3개씩 그룹을 지은다음 이들의 총합이 0인 경우를 세면되는데 그룹을 지을때 조합(=combinations)를 사용하면 된다! from itertools import combinations def solution(number): answer = 0 tmp = list(combinations(number, 3)) for item in tmp: if sum(item)==0: answer += 1 return answer
Programmers Lv.1 "예산" 문제가 굉장히 길지만 사실 가만히 살펴보면 각 팀별 신청한 예산목록 리스트인 d와 주어진 예산인 budget을 두고 budget의 범위안에서 얼마나 많은 팀의 신청 예산 누적합이 포함될 수 있는지 따져보면 된다. 필자는 계산을 순차적으로 편하게 하기위해 정렬시키고, 순차적으로 누적합을 구하면서 budget보다 커질 경우 반복을 끝내면 된다. def solution(d, budget): answer = 0 tmp = 0 d.sort() for target in d: tmp += target if budget < tmp: break answer += 1 return answer
소수와 소인수 분해 (Prime Number, Prime Factorization) 소수 (Prime Number)는 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수를 의미한다. 예를 들어, 5는 1x5 혹은 5x1로, 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 소수에 해당한다. 반대개념으로 합성수(Composite Number)가 있는데 여기서는 소수에 집중해보자. 정수론의 기본 정리에 의해, 모든 자연수는 꼭 한가지 방법으로 "소수의 곱"으로 표현할 수 있고 이를 소인수 분해의 일의성이라고 한다. 즉, 곱셉의 관점에서 소수는 자연수를 이루는 성분이라 할 수 있다. 아래 예시를 보자. $$23244 = 2^2 \times 3 \times 13 \times 149$$ `23244`는 약수의 순서를 무시하면 단 1개의 방법으로 소인수 분해가 된다. 현재..
NLP Load : 맨땅에 헤딩하는 NLP 공부일지 (11) 지난 포스팅에선 Word2Vec에 대해 알아봤죠, 이번에는 FastText에 대해 알아봅시다. 반복해서 말하지만 Word2Vec, FastText 둘다 신경망을 이용한 단어의 벡터화 방법론입니다😊 Ⅰ. FastText Word2Vec의 개량 알고리즘으로 Subword를 고려한 알고리즘입니다! 이는 Word2Vec의 한계점에서부터 파생된 개념인데 컴퓨터는 단어가 생긴게 다르면 아예 다른단어로 인식해버립니다. eat과 eating이 공통적으로 eat을 가지고 있더라고 할 지라도 말이죠...! 즉 위 그림처럼 형태학적인 특징이 단어의 의미고려에 반영되지 않습니다... 그외에도 OOV(Out of Vocabulary)라고 하는 문제도 있어요. 그래서 FastText는 Subword라는 개념을 도입하게 되는데요,..
NLP Load : 맨땅에 헤딩하는 NLP 공부일지 (10) 저번 포스팅에 이어 본격적으로 Word2Vec에 대해 공부해봅시다!! Ⅰ. Word2Vec 반복해서 이야기하지만 컴퓨터가 신경망을 이용해 단어에 대한 작업을 하기위해서는 단어를 '벡터화'시킬 필요가 있습니다! 이를 위해 사용하는 방법론은 Word2Vec, GloVe, FastText등 많지만 이번 포스팅에선 Word2Vec에 집중해보죠! Word2Vec은 임베딩 그 자체에만 집중하는 신경망 모델인데요, 크게 2가지로 분류가 됩니다! 주변단어들로부터 중심단어를 예측하는 CBoW와 반대로 중심단어들로부터 주변 단어를 예측하는 Skip-gram이 있습니다! 과거는 어땠을지 몰라도 현재는 CBoW보다는 Skip-gram이 좋은 성능을 낸다고 합니다. 요 Skip-gram도 구버전과 신버전으로 나뉜다고 하는데, ..