no image
[파이썬] 프로그래머스 명예의 전당 (1) 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 $k$개의 점수만 기록하려면 점수를 정렬해서 관리하는 것이 필요하다. $k$일 이후에는 가장 작은 값 1개만 제거하면 되기 때문에 우선 순위 큐를 사용해 시간 복잡도를 줄였다. 우선 순위큐의 push, pop의 시간 복잡도는 $O(\log N)$이다. import heapq def solution(k, score): answer = [] # 최하 점수만 확인하면 되기 때문에 heapq 사용 heap = [] for i in score: heapq.heappush(heap, i) # 개수 ..
2023.01.19
no image
[파이썬] 프로그래머스 과일 장수 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 박스에 담을 사과 개수가 $m$으로 고정돼 있어 내림차순 정렬만으로도 최대 가격을 설정할 수 있다. 내림차순으로 정렬하게 되면 매번 $m$ 번째 사과의 점수가 전체 사과 상자의 가격을 결정한다. # 점수가 가장 낮은 사과가 가격을 결정 # 따라서 점수가 높은 사과끼리 묶어야 최대 가격 설정 가능 def solution(k, m, score): answer = 0 score.sort(reverse = True) # idx 대소 비교 과정에서 계속 계산되기 때문에 미리 계산 score_len..
2023.01.18
no image
[파이썬] 프로그래머스 가장 가까운 같은 글자 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 아직 문자가 나오지 않은 경우엔 $-1$ 값을 가지기 때문에 초기 answer 성분을 -1로 설정했다. def solution(s): char_set = {} # -1로 초기화 answer = [-1] * len(s) for i, char in enumerate(s): # 문자가 이미 나온 경우 if char in char_set: answer[i] = i - char_set[char] # 위치 정보 업데이트 char_set[char] = i return answer
2023.01.18
no image
[Python] 프로그래머스 푸드 파이트 대회 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 동일한 메뉴가 양쪽에 위치하려면, 메뉴가 짝수개만큼 있어야 한다. 문자열은 sequence type이기 때문에 slicing이 가능하다. # -> 물
2023.01.18
no image
[파이썬] 프로그래머스 콜라 문제 풀이
문제 확인하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 a개의 콜라를 제출해서 1개의 콜라를 받는다고 가정하면, N개의 콜라는 Q 번 교환하는데 사용된 콜라와, 교환에 활용되지 못한 R 개의 콜라로 표현할 수 있다. Q번의 교환을 통해 얻을 수 있는 콜라의 개수는 콜라 교환비 값인 b를 곱해주면 된다. # 몫 : 새로 받을 콜라 개수, 나머지 : 남은 콜라 개수 def solution(a, b, n): answer = 0 # 교환 가능할 때 까지 실행 while n >= a: q, r = divmod(n, a) # 교환 비가 1보다 큰 경..
2023.01.17
no image
Github Stats의 Maximum retries exceeded 오류 해결하기
어떤 오류?Github Stats를 쓰다보면 위와 같은 메시지가 나오면서 원하는 카드(배지)가 나오지 않는 경우가 있다. 물론 시간이 지나면 다시 정상적으로 표시되긴 하지만, 가능하면 문제를 해결하고 싶었다. 느낌에 나만 겪을 문제는 아닌 거 같아서 isseus 탭에 들어가보니 이미 해결 방법과 문제 원인까지 다 나와 있었다 ㅎㅎ 우선 문제의 원인은 오류 메시지(maximum retries exceeded)에도 나와 있듯, 배포자에게 너무 많은 request가 있어서 병목이 발생하는 것이다. 이를 해결하기 위해서 감당할 수 있는 request 수를 지속적으로 늘리고 있다곤 하는데, 언젠가 또 이런 문제가 발생할 수 밖에 없는 구조다. Deploy on your own vercel instance 결국 문..
2023.01.16
no image
[Seaborn] scatterplot에 regression line 추가하기
regplot과 scatterplot 함께 활용하기 regplot의 점이 노출되지 않게 하려면 scatter = False로 설정해야 한다. fig, axs = plt.subplots(2, 1, figsize = (15, 10)) sns.regplot(data = test_final, x = "test_loss", y = "val_loss", scatter = False, ax = axs[0]) sns.scatterplot(data = test_final, x = "test_loss", y = "val_loss", hue = "test_pearsonr", ax = axs[0]) sns.regplot(data = test_final, x = "test_loss", y = "val_loss", scatter..
2023.01.14
no image
[Python] argparse 알아보기
argparse CLI를 통해 사용자 입력을 받아야 할 때 주로 활용한다. argparse.Argumentparser() 사용자 입력이 필요한 경우에 활용하자. 인자를 단순히 저장하는 것에 그치지 않고, 추가적인 행동을 명시해주고 싶을 때 활용하자 argparse.Namespace() 사용자 입력이 필요하지 않은 경우에 활용하자. argparse.py 구조 전체 코드에서 _AttributeHolder는 Action, Namespace, ArgumentParser만 상속한다. 인자를 저장하는 것이 모듈 목적인 점을 고려하면, 결국 Action, Namespace, ArgumentParser가 핵심인 것을 알 수 있다. 추가로 코드를 보면 ArgumentParser는 _ActionsCotainer 까지 상속..
2023.01.05
no image
Convolution을 Neural Networks에서 활용 하기
Summary CNN이 이미지 데이터에 많이 활용되는 이유는, 이미지 데이터의 stationarity, locality 가정에 적합한 연산인 Convolution을 활용하기 때문이다. Convolution은 기존 MLP와는 다른 방식으로 연산을 하기 때문에, Neural Networks 관점으론 Sparse interaction이고, 동시에 Parameter sharing이 있다고 말한다. 새로운 단어가 갑자기 나와서 '기존의 Convolution과 다른가?' 라고 생각이 들 수 있지만, 해당 용어들은 단순히 Neural Networks가 기준이 되면서 새롭게 붙여진 단어일 뿐이다. 커널 단위로 연산하기 때문에 Sparse 하다는 것이고, 커널의 가중치를 공유하기 때문에 Sharing이 있다고 말하는 것..
2022.12.30
no image
Convolution과 Stationarity, Locality 가정
Summary CNN(Convolutional Neural Networks)이 이미지 처리에 많이 활용되는 이유는, 이미지 데이터에 적합하도록 설계 됐기 때문이다. 실제로 CNN은 이미지 데이터의 stationarity of statistics, locality of pixel dependencies 가정을 고려하여 설계 됐다. Locality 가정은 커널 단위 연산을 통해, Stationarity 가정은 연산 과정에 Convolution(Cross-correlation)을 사용하여 만족한다. 결국 CNN의 이름에도 적혀 있는 Convolution 연산이 이미지와 너무 잘 맞아서, 성능도 잘 나오고 많이 활용되는 것이다. 이 포스팅에선 Convolution 연산이 무엇인지는 다루지 않고, 왜 Convol..
2022.12.27
no image
[FSDL 정리] 머신러닝 프로젝트 테스트(Testing) 하기 : 코드 영역
Testing(테스트)이 무엇이고 왜 필요한가요? 코드에 버그가 있는지 확인하는 작업을 Testing(테스트)라고 한다. 테스트는 코드가 가지고 있는 문제점을 프로젝트에 적용하기 전에 미리 확인할 수 있다는 점에서, 프로젝트 유지 보수에 큰 도움이 된다. 따라서 테스트를 잘하는 것은 프로젝트 성공에 매우 중요한 요소 중 하나이다. 성공적인 테스트를 위해선 우선 테스트 통과 여부와 버그 발생 여부가 항상 100% 관련 있지 않다는 점을 알아야 한다. 실제로 테스트를 통해서 확인할 수 있는 것은 단순히 '정해둔 테스트 케이스 조건을 지켰는지'이다. 결국 테스트의 효과를 극대화하기 위해선 테스트 케이스를 잘 설정하는 것이 중요하다. 그럼 어떻게 테스트 케이스가 설정 됐을 때 '잘' 됐다고 말할 수 있을까? 답..
2022.12.21
no image
[FSDL 정리] 분산 학습(Distributed Training) 알아보기
Full Stack Deep Learning - Lecture 2: Development Infrastructure & Tooling Software engineering, Deep learning frameworks, Distributed training, GPUs, and Experiment Management. fullstackdeeplearning.com 모든 사진과 글은 위 링크를 참고했습니다. 분산 학습 모델 파라미터와 데이터 배치의 메모리 사용량이 크지 않다면, 1개의 GPU로 모델 학습을 진행하면 된다. 만약 그렇지 않은 경우엔 여러 GPU를 동시에 활용하는 분산 학습을 활용한다. Data Parallelism(DP) DP란 1개의 GPU로 모델 파라미터는 저장할 수 있지만, 데이터 배치까..
2022.12.19