no image
[파이썬] 프로그래머스 게임 맵 최단거리 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 최단 거리를 구하기 위해서 BFS를 활용했다. # 최단 거리 반환 from collections import deque def bfs(maps, x, y): # 다음에 방문할 지점 저장 next_visit = deque() next_visit.append([x, y]) # 방향 설정 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] # 방문 시작 while next_visit: x, y = next_visit.popleft() # 이동 for i in range(4): ..
2022.10.07
no image
[파이썬] 프로그래머스 타겟 넘버
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 기존에 DFS, BFS를 시뮬레이션에서만 활용했어서 간단한 문제임에도 못 풀었다. DFS를 활용할 때, 어떤 값을 넘겨줄 지가 정확히 설계하는 것이 중요함을 깨달았다. DFS를 재귀, stack 방식 모두를 활용해 구현해봤다. from collections import deque def dfs(num_sum: int, idx: int, max_idx: int, numbers: list, target: int): global answer # DFS 진행 동안 answer 값 증가 if idx == m..
2022.10.03
no image
[파이썬] 프로그래머스 H-Index
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 각 h마다 추가되는 인용문 개수를 이분 탐색으로 찾아서 더했다. from bisect import bisect_left, bisect_right def solution(citations): citations.sort() # h ~ 0까지 가능 cum_sum = dict(zip(range(len(citations)), [0] * len(citations))) # h보다 더 많이 인용된 논문 개수 temp_sum = sum([1 for i in citations if i > len(citations)]..
2022.10.02
no image
[파이썬] 프로그래머스 성격 유형 검사하기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 우선 순위가 동일할 경우를 대비해 미리 알파벳 순으로 answer에 입력했다. def solution(survey, choices): # 미리 알파벳 순으로 정렬 answer = ["R", "C", "J", "A"] score = {"R":0, "T":0, "C":0, "F":0, "J":0, "M":0, "A":0, "N": 0} for s, c in zip(survey, choices): if c 4: score[s[1]] += ..
2022.10.01
no image
[파이썬] 프로그래머스 신고 결과 받기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 유저가 신고한 사용자 정보를 저장하는 대신, 유저를 신고한 사용자 정보를 저장했다. def solution(id_list, report, k): # 사용자를 신고한 유저 user_report = {} report = list(set(report)) # 신고 처리 for i in report: a, b = i.split(" ") # 신고 처리 if b not in user_report: user_report[b] = set() user_report[b].add(a) # 메일 개수 mail_cnt = ..
2022.10.01
no image
[파이썬] 프로그래머스 신규 아이디 추천
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 조건이 까다로워서 정규 표현식으로 풀었다. [ic]+[/ic], [ic]^[/ic], [ic]$[/ic] 등 패턴을 익히느라 풀이까지는 시간이 조금 걸렸다. import re def solution(new_id): # 대문자 -> 소문자 new_id = new_id.lower() # 허용되는 문자만 받아오기 new_id = re.sub(r"[^0-9a-z-_.]", "", new_id) # .는 그대로 쓰면 문자 전체가 됨 new_id = re.sub(r"[.]+", ".", new_id) new_..
2022.09.27
no image
[파이썬] 프로그래머스 키패드 누르기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 *과 #을 10, 12라고 생각하면 키패드 영역을 3의 몫,나머지 좌표로 표현할 수 있다. 나머지가 0인 경우 왼손, 2인 경우 오른손으로 처리하면 된다. def solution(numbers, hand): # 현재 손가락 위치 pos_left = 9 pos_right = 11 # ?손잡이 처리 hand = hand[0].upper() answer = "" for i in numbers: i -= 1 if i == -1 : i = 10 # 이동해야할 좌표 x, y = divmod(i, 3) if y..
2022.09.27
no image
Affine 변환과 딥러닝
변환 → 공간을 변형 직선과 평형성을 그대로 유지하는 변환을 Affine 변환이라고 한다. Affine 변환의 일반식은 `Wx + b` 이며, 이는 Linear Transformation에 Traslation 항이 추가된 형태이다. Affine 변환의 전 - 후 과정을 시각화하면 다음과 같다. 위 그림을 보면 변환에 의해 격자 전체가 함께 이동한다는 것을 확인할 수 있다. 이처럼 변환에 의해 모든 점이 영향을 받아 이동하는 것은, 공간(Space)이 변형되는 것처럼 생각할 수 있다. 이 경우 변환의 역할이 공간을 변형시키는 것이라고 해도 무방할 것이다. 멀쩡한 공간을 굳이 변형하는 이유는 당연하게도 어떤 이득이 있기 때문이다. 실제로 변환에 의해 새롭게 얻은 공간에선, 기존에 풀지 못했던 문제를 해결할 ..
2022.09.25
no image
[파이썬] 프로그래머스 크레인 인형 뽑기
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 열 단위 입력을 처리하기 위해서 dict를 만들었는데 그냥 board 변수 그대로 for문 돌려도 됐을 거 같다. 사라진 인형의 개수를 세기 위해서 [ic]stack[/ic]을 사용했다. from collections import deque def solution(board, moves): # 남은 열 개수 len_list = dict(zip(range(1, len(board) + 1), [0] * len(board))) # 남은 열 저장 for idx, col in enumerate(zip(*bo..
2022.09.16
no image
[파이썬] 정규 표현식 활용하기
기본 패턴 re.search() : 주어진 패턴과 일치해야 함 re.match() : 주어진 패턴과 처음부터 일치해야 함 고급 패턴 () : 문자열을 그룹으로 묶어서 관리(캡쳐)할 수 있도록 도와준다. \1 ~ 9 : 캡쳐된 그룹의 인덱스를 명시해서 참고할 수 있다. # () : 그룹 지정, \1 : 캡쳐된 그룹 참조 re_pt1 = r"(aya|ye|woo|ma)\1+" 찾고자 하는 패턴이 반복되는 경우, Group 또는 findall을 활용할 수 있다. Group 활용한 경우 예시 # 우선 Group으로 match 시작 >>> m = re.match('([0-9]+) ([0-9]+)', '10 295') >>> m.group(1) # 첫 번째 그룹(그룹 1)에 매칭된 문자열을 반환 '10' >>> m..
2022.09.14
no image
Ensemble(앙상블) 기법 이해하기
Ensemble(앙상블)? 단일 모델 예측에 대한 Bias(편향), Variance(분산) 사이 관계를 표현하면 위 그림과 같다. 편향과 분산이 모두 낮은 이상적인 경우는 아쉽게도 불가능하다. 둘은 Trade-off 관계이기 때문이다. 하지만 단일 모델을 여러 개 모아 예측에 활용하면 편향과 분산 모두가 낮아지도록 예측을 개선할 수 있다. 이처럼 단일 모델을 여러 개 모아 예측을 개선하는 방법을 앙상블이라고 한다. 앙상블 구성 시 중요 고려 사항은 '개별 모델들이 충분한 수준의 Diversity를 만족하는 지'와 개별 모델의 결과를 '어떤 방식으로 합칠 것인지'이다. Diversity : Implicit vs Explicit 완전히 동일한 가중치를 가지는 모델을 여러개 묶는 경우, Diversity가 만..
2022.09.02
no image
[논문 리뷰] TabNet: Attentive Interpretable Tabular Learning
Abstract TabNet은 정형 데이터에 적합하도록 설계된 딥러닝 모델이다. TabNet은 Sequential Attention을 통해서 각 decision step 마다 feature(특성)을 선택하고, 이를 통해 트리 모델과 유사한 결정 경계를 가지게 된다. 이는 TabNet이 정형 데이터에 잘 동작할 수 있도록 해주는 inductive bias면서, 동시에 결과 해석과 효과적 학습도 가능하도록 도와준다. TabNet의 우수성은 여러 벤치 마크에서 기록한 높은 성능을 통해서 확인할 수 있다. 정형 데이터에 흔한 결측치도 self-supervised learning을 통해서 어느 정도 처리할 수 있다는 점도 특징이다. Introduction 이미지, 텍스트 등의 데이터엔 딥러닝이 많이 사용되는 반면..
2022.08.27