no image
[파이썬] 프로그래머스 영어 끝말잇기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 중복 여부를 확인하기 위해서 set()을 사용했고, 그에 따라 마지막 단어를 확인하는 변수도 활용했다. words의 길이가 50 정도로 작은 편이기 때문에, 리스트를 사용해서 마지막 단어, 중복 여부 확인을 동시에 하는 것이 더 좋았을 거 같다. # 정답 : (먼저 탈락하는 사람의 번호, 몇 번째 차례에 탈락) def solution(n, words): answer = [0, 0] # 중복 단어 체크 word_set = set() last_word = "" # 끝말잇기 시작 for idx..
2023.01.31
no image
경사 하강법이 Gradient의 반대 방향으로 진행되는 이유
Intro Gradient descent(경사 하강법)은 최적화 기법 중 하나로, 손실 함수를 최소화하기 위해서 사용된다. 경사 하강법에선 효과적으로 $\theta$ 를 변화시키기 위해, 가장 가파른 경사 방향으로 $\theta$ 를 업데이트한다. 이때, 가장 가파른 경사일 때의 방향이 Gradient 방향 일 때 이므로, $\theta$ 는 Gradient의 반대 방향으로 업데이트된다. 누군가 나에게 경사 하강법을 간단하게 설명하라고 하면, 아마도 위에 적은 것처럼 말할 거 같다. 근데 저 설명을 듣는 입장에선, 아마도 왜 가장 가파른 경사일 때의 방향이 Gradient 방향이고, 왜 Gradient의 반대 방향으로 $\theta$ 가 업데이트 돼야 하는 지에 대해서 의문이 생길 거 같다. 그래서 위와..
2023.01.31
no image
Hypothesis Test(가설 검정)의 오류와 Critical value(임계값) 사이 관계 확인하기 Feat. 검정력, 유의 수준
검정의 오류? 가설 검정 과정에서 가설은 2 가지이고, 이는 Null Hypothesis(귀무 가설 : $H_0$)과 Alternative Hypothesis(대립 가설 : $H_A$)이다. $H_A$의 이름이 대립(대안)인 것은 $H_0$와의 관계 때문이다. 가설 검정의 중심은 $H_0$이다. 검정 결과에 따라 $H_0$를 기각하거나, 기각하지 못하냐 딱 2 가지이다. 이에 따라 $H_A$가 채택될 수도, 아닐 수도 있다. $H_0$을 중심으로 생각해보면, 가설 검정 시 발생할 수 있는 오류는 2 가지 이다. 제 1종 오류 : $H_0$가 참인데도, $H_0$을 기각한 경우 제 2종 오류 : $H_0$가 거짓인데도, $H_0$을 기각하지 않은 경우 = $H_A$가 참인데도, $H_A$을 채택하지 않은 ..
2023.01.30
no image
Hypothesis Test(가설 검정)과 Null hypothesis(귀무 가설), p - value 사이 관계 알아보기
Hypothesis Test(가설 검정)? Population(모집단)에 대한 어떤 특성(가설)을 주장하고 싶어도, 그 모집단을 직접 확인할 수 없는 상황이 대부분이다. 따라서 이럴 땐 Sample(표본)을 참고할 수밖에 없다. 하지만 표본은 모집단으로부터 랜덤하게 얻은 것이기에, 그 주장이 타당한 지 항상 고민해야 한다. 표본으로 모집단의 특성을 주장(가설)할 땐, 그 가설이 얼마나 타당한 지 확인하기 위한 작업이 필요하고 이를 가설 검정이라고 한다. 이때 가설 검정의 타당성은 p - value를 사용해 확률의 개념으로 표현한다. 검정의 타당성을 확률로 접근하는 이유는, 표본이란 모집단 입장에선 랜덤하게 추출된 것 중 하나에 불과하기 때문이다. 표본으로 인해 모집단에 대한 잘못된 판단을 내리지 않으려면..
2023.01.30
no image
[파이썬] 프로그래머스 다음 큰 숫자 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 완전 탐색을 활용해서 풀었다. 이 경우 시간 복잡도는 $N$ * $((\log C + C)) \times C$이다. $C$가 대략 $\log_{2}{10^6} = 20$ 정도라서 시간 초과가 발생하진 않는다. # 다음 큰 숫자 : 'n보다 크고, 2 진수 표현에서 1의 갯수가 같은 수' 중에서 가장 작은 숫자 # 시간 복잡도 : n * ((logc + c) * c) def solution(n): n_cnt = bin(n)[2:].count("1") check = n + 1 while Tr..
2023.01.30
no image
[파이썬] 프로그래머스 숫자의 표현 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 i, j를 각각 연속된 수의 시작과 끝으로 생각하면, 각 i 마다의 j를 찾으면 문제를 풀 수 있다. 합을 구하는 과정에서 동일한 연산이 계속 반복되기 때문에, 누적합을 미리 계산했다. def solution(n): answer = 0 # 누적합 cum_sum = [] for i in range(10001): cum_sum.append((i * (i + 1) // 2)) # 확인 for i in range(10001): for j in range(i + 1, 10001): if cum_s..
2023.01.29
no image
[파이썬] 프로그래머스 JadenCase 문자열 만들기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 문제 조건에 띄어쓰기가 여러 개 있을 수 있다고 나와서, 그냥 문자 단위로 확인했다. upper, lower 함수는 숫자가 섞여 있더라도, 문자에만 영향을 준다 def solution(s): answer = "" word = "" for char in s: if char == " ": answer += (word + " ") word = "" else: if not word: word += char.upper() else: word += char.lower() # 마지막 부분 answer..
2023.01.27
no image
[파이썬] 프로그래머스 개인정보 수집 유효기간 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 날짜 정보를 간단하게 처리하기 위해서 '일' 단위로 변경하여 문제를 풀었다. 2 중 리스트를 zip하기 위해서 *를 사용했다. def cnt_day(day: str) -> int: # 날짜 정보를 '일' 단위로 변경하는 함수 day = day.split(".") day = int(day[0]) * 12 * 28 + int(day[1]) * 28 + int(day[2]) return day def solution(today, terms, privacies): answer = [] # 비교하..
2023.01.26
no image
[파이썬] 프로그래머스 햄버거 만들기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 처음엔 str.replace(, , 1)를 활용해서 풀려고 했다. 이 경우 $O(N^2)$의 시간 복잡도를 가지기 때문에 시간 초과가 발생한다. def solution(ingredient): answer = 0 food = list(map(str, ingredient)) food = "".join(food) while food: # 한번에 1개의 문자열만 교체할 수 있도록 1을 설정 했다. temp = food.replace("1231", "", 1) if food == temp: bre..
2023.01.25
no image
[파이썬] 프로그래머스 문자열 나누기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 분리 전 문자열을 word 변수를 활용해서 관리했다. def solution(s): answer = 0 word = "" # 개수 세기 x_cnt, y_cnt = 0, 0 for char in s: # 새로운 단어 생성 if not word: word += char x_cnt += 1 continue # 글자 확인 if char == word[0]: x_cnt += 1 elif char != word[0]: y_cnt += 1 # 문자열 분리 if x_cnt == y_cnt: answer..
2023.01.25
no image
[파이썬] 프로그래머스 옹알이 (2) 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 문자열을 완전 탐색해 정해진 패턴을 찾는 방식으로 문제를 풀었다. 이전 패턴과 겹치는지 여부를 확인하기 위해서 idx를 활용했다. def solution(babbling): answer = 0 for bab in babbling: # 비교할 문자열 temp_c = "" # 이전에 나온 단어 확인 prev_idx = -1 for c in bab: temp_c +=c # 못 찾은 경우 중단 if len(temp_c) > 4: break # 체크 시작 for idx, word in enumer..
2023.01.24
no image
[FSDL 정리] 머신러닝 프로젝트 테스트(Testing) 하기 : 시스템 영역
ML 시스템 Testing 머신러닝의 경우 일반적인 소프트웨어 프로그램보다 Testing이 어렵다. 소프트웨어는 소스 코드를 프로그램으로 바꾸는 것이 주목적이지만, 머신러닝의 경우 추상적인 데이터와 모델을 활용하기 때문이다. 실제로 소스 코드 관리보다는 데이터를 관리하는 것이 추상적이고 난도가 높다. 또한 모델 학습 과정은 잘 정의되지 않아 복잡한 경우가 많고, 관련 디버깅 툴도 부족한 상황이다. 따라서 ML 시스템에선 주요 기능이 정상적으로 동작하는지 간단히 확인하는 Smoke test 기법을 주로 활용한다. Smoke test : 데이터 확인하기 데이터가 원하는 형태(null 값 여부, 칼럼 여부 등)로 잘 있는지 확인한다. 과정에서 상태를 기록하는 리포트를 작성하거나, 알림을 보낼 수 있도록 설정한..
2023.01.20