본문 바로가기

All91

[파이썬] 성격 유형 검사하기 - 2022 KAKAO TECH INTERNSHIP [CODING TEST #59] https://school.programmers.co.kr/learn/courses/30/lessons/118666 딕셔너리를 이용하여 풀었다. def solution(survey, choices): answer = '' check_dict = {'R' : 0, 'T' : 0, 'F' : 0, 'C' : 0, 'M' : 0, 'J' : 0, 'A' : 0, 'N' : 0 } for idx, question in enumerate(survey): if choices[idx] == 4: # center continue elif choices[idx] - 4 < 0: # left check_dict[question[0]] += abs(choices[idx] - 4) else: # right check_dict.. 2022. 8. 20.
[파이썬] 점프와 순간 이동 - Summer/Winter Coding(~2018) [CODING TEST #58] https://school.programmers.co.kr/learn/courses/30/lessons/12980 동적계획법(DP)을 이용하여 풀 수 있다. 아래서부터 위로 채워가는 Bottom - Up 방식을 이용하면 런타임 에러가 난다. n만큼 반복문을 돌아야 하는데 n의 크기가 최대 10억이기 때문이다. 문제가 풀리긴 하니 작은 입력 크기에서 사용해야 함. # Bottom-Up def solution(n): dp = [0] * (n+1) dp[1] = 1 for i in range(2,n+1): if i%2 == 1: dp[i] = dp[i-1]+1 else: dp[i] = min(dp[i-1]+1,dp[int(i/2)]) return dp[n] Top - Down 방식을 이용하면 짝수마다 2로 나.. 2022. 8. 18.
Word Embeddings [Deep Learning Specialization #13] Coursera의 Deep Learning Specialization - Week 5의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다. 지난 시간에는 RNN, LSTM, GRU 등에 대해 배웠습니다. 이번 시간에는 Word Embeddings와 NLP(Natural Language Processing) - 자연어 처리에 대한 아이디어를 살펴 보겠습니다. Word Representation 지난 시간에 시퀀스 모델에서 단어 하나를 one-hot vector로 표현한다고 배웠습니다. 하지만 one-hot 표현은 다른 단어들과의 유사성, 상관관계를 추론할 수 없다는 점이 큰 단점입니다. 예를 들어, orange 다음의 빈 칸에 "juice"가 오도록 학습된 모델이 apple을 봤을 때, one-ho.. 2022. 8. 18.
[파이썬] 2 x n 타일링 [CODING TEST #57] https://school.programmers.co.kr/learn/courses/30/lessons/12900 동적계획법(DP)으로 해결.. 가로 블럭을 사용하면 무조건 2 x 2를 채워야 한다. 그래서 가로 기준 i-1번째까지 채웠을 때는 세로 블럭을 추가하는 방법 뿐이고, i-2번째까지 채웠을 때는 가로 블럭 2개를 추가하는 방법 뿐이다. i-2번째에서 세로 블럭을 채우는 건 dp[i-1]과 겹치므로 제외한다. 따라서 dp[i] = dp[i-1] + dp[i-2]가 성립한다. def solution(n): dp = [0] * (n+1) dp[1] = 1 dp[2] = 2 for i in range(3,n+1): dp[i] = (dp[i-1] + dp[i-2]) % 1000000007 return .. 2022. 8. 17.
[파이썬] JadenCase 문자열 만들기 [CODING TEST #56] https://school.programmers.co.kr/learn/courses/30/lessons/12951 처음엔 여백을 기준으로 split하여 첫 글자만 check하려 했으나, 공백문자가 여러 개인 경우와 마지막이 공백으로 끝나는 경우 등을 처리하지 못하여 enumerate를 이용했다. 해당 문자가 단어의 첫 글자인지 check하는 방법은 idx==0 or s[idx-1] == ' ' 이다. 첫 글자이거나 이전 글자가 공백이면 단어의 첫 글자가 된다. 첫 글자일 경우 대문자로 추가하고, 이외의 문자들은 소문자로 추가하도록 하면 된다. def solution(s): answer = '' # 각 단어의 첫 알파벳만 check하고, 이후 단어들은 lower 처리. for idx, alpha in en.. 2022. 8. 17.
[파이썬] 문자열 압축 - 2020 KAKAO BLIND RECRUITMENT[CODING TEST #55] https://school.programmers.co.kr/learn/courses/30/lessons/60057 문자열 s의 절반에 해당하는 길이까지 문자열 압축 단위를 반복하여 조건에 맞게 새로운 문자열을 완성하고, 가장 짧은 문자열의 길이를 갱신하여 반환하도록 하면 된다. pattern을 구하는 과정에서, len(s)가 1일 때는 len(s)//2 + 1 = 1이 되어 range(1,1)은 내부 코드가 실행되지 않는다. 따라서 len(s)//2 + 2만큼 반복하도록 하였다. def solution(s): answer = 987654321 for i in range(1,len(s)//2 + 2): # len(s) == 1인 경우를 대비, +1 대신 +2 pattern = s[:i] new_s = ''.. 2022. 8. 17.
[파이썬] 힙 / Heap [Algorithm #5] Heap(힙) 부모 노드가 자식 노드보다 항상 작거나 큰 값을 가지는 특별한 규칙을 가진 트리를 말한다. 부모가 자식보다 작은 값을 가지도록 하는 트리를 최소 힙(Min Heap)이라 하고, 최소 힙의 최상위 노드(Root)는 주어진 값 중 최솟값을 가지게 된다. 반대는 최대 힙(Max Heap)이다. 파이썬에서 Heap은 heapq 모듈을 이용하여 구현한다. 주어진 리스트를 heapify() 함수를 이용하여 heap으로 만들 수 있다. 기본 상태는 최소 힙이다. heap의 첫 번째 값이 root이므로, heap[0]을 통해 값을 읽어올 수 있다. heappush(heap, item) 함수로 heap에 원소 item을 넣을 수 있다. heap 상태를 유지함. heappop(heap) 함수로 heap의 r.. 2022. 8. 16.
[파이썬] 더 맵게 - 힙(Heap) [CODING TEST #54] https://school.programmers.co.kr/learn/courses/30/lessons/42626 heapq 모듈로 힙을 만들어서 구현했다. scoville 리스트를 최소 힙으로 만들고 최솟값이 K 이상이 될 때까지 섞기를 반복했다. import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) # minheap while scoville[0] < K : # 최솟값이 K보다 작을 때 if len(scoville) == 1: # -1 조건 return -1 min_1 = heapq.heappop(scoville) min_2 = heapq.heappop(scoville) heapq.heappush(scoville,min_.. 2022. 8. 16.
[파이썬] 영어 끝말잇기 - Summer/Winter Coding(~2018) [CODING TEST #53] https://school.programmers.co.kr/learn/courses/30/lessons/12981 끝말잇기가 틀린 걸 check하고, 해당 순서가 누구의 몇 번째 턴인지를 구하는 문제이다. 누가 틀렸는지는 나머지 연산 %를 이용한다. 나누어 떨어질 때를 제외하고는 모두 나눈 나머지가 그 차례가 된다. (ex : 5 % 3 ==> 2번째 사람) 나누어 떨어질 때, 6 % 3 == 0일 때에만 n을 집어넣는다. 몇 번째 턴인지는 몫연산자 //를 이용한다. n으로 나누어야 하는데, 전체 순서에서 1을 빼준 뒤 n으로 나누어야 한다. 예를 들어 n이 5일 때 6~10은 모두 같은 2번째 턴이 되는데, 10 // 5만 2가 나오기 때문이다. 따라서 (order - 1 // n) + 1 처럼, 순서.. 2022. 8. 13.
728x90