no image
[파이썬] 프로그래머스 [3차] 압축 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 알파벳을 하나씩 더해서 새로운 단어를 만들고, 만약 그 단어가 사전에 없는 경우 저장한다. 이 경우 저장된 단어의 바로 이전 단어가 현재 사전에 중 가장 긴 단어이다. 마지막 단어가 사전에 있는 경우 체크가 되지 않기 때문에, 이를 방지하기 위해서 조건문을 추가했다. # 길이가 1인 모든 단어를 포함 하도록 사전 초기화 -> 알파벳 입력 # 현재 입력과 일치하는 가장 긴 문자열 w 찾기 -> 한 글자씩 더해가면서 있는지 확인 -> 만약 없다면, 새로 등록해야함! # w에 해당하는 색인 번..
2023.02.15
no image
Argument 때문에 jupyter notebook에서 NoneType 에러가 발생할 경우
원인 파이썬 파일 실행 시 !python3를 사용할 경우 Arguments가 인식되지 않아 NoneType 에러가 발생할 수 있다.!python3 파일명해결 방법%run 을 활용해서 파이썬 파일을 실행하자%run 파일명
2023.02.14
no image
[파이썬] 프로그래머스 k진수에서 소수 개수 구하기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 정규 표현식을 활용한 풀이 1 : 에라토스테네스의 체 활용 → 시간 초과 작은 진법으로 변환 시, 에라토스테네스의 체로 저장 가능한 범위를 넘기 때문에 테스트 케이스 1을 통과할 수 없다. 100만을 2진수로 표현하면, 21개의 숫자가 필요한데, 그 이전에 분명 11111111111111...과 같은 숫자가 여러 번 나올 것 다양한 패턴을 한번에 확인하기 위해서, 정규 표현식의 Group을 활용했다. # 소수 판별 def get_prime(c): is_prime = [True] * (c ..
2023.02.14
no image
[파이썬] 프로그래머스 연속 부분 수열 합의 개수 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 성분의 개수($n$)을 늘려가며 부분 수열을 구성하면 되는 문제다. 끝점의 index가 범위를 초과할 경우를 처리해주는 것이 중요하다. 범위 초과 시 위 그림과 같이 표현할 수 있기 때문에 각 수열을 나눠서 합했다. def solution(elements): sum_unique = set() # 성분 개수 for n in range(len(elements)): # 시작점 for i in range(len(elements)): # 배열의 길이 초과할 경우 if n + i > len(elem..
2023.02.13
no image
[파이썬] 프로그래머스 전화번호 목록 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 처음 풀이 : 시간 초과 발생 접두어의 길이는 '최대 단어 길이 -1' 까지만 가능하다. 길이에 따라서 접두어 후보를 나누고, 이후 비교하는 방식으로 접근하려고 했다. 후보를 나누고, 비교하는 과정이 대략 $O(20 * (50000)^2)$이 되기 때문에 시간 초과가 발생했다. # 접두어 여부 확인 # 접두어? (최대 단어 길이 -1) 까지만 접두어가 될 수 있음 # 접두어 탐색 범위 : 나보다 길이가 더 긴 단어들만 확인 가능 # 길이에 따라서, 접두어 후보를 나누고, 이후 비교하면? ..
2023.02.10
no image
[파이썬] 프로그래머스 귤 고르기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 귤 k개를 종류를 최소화하면서 구하려면, 많은 개수를 가진 종류부터 차례로 선택하면 된다. 개수를 세기 위해서 Counter를 활용했다. # 귤 k 개 -> 서로 다른 종류 최소화! # Counter 사용 후, 개수 기준 내림차순 정렬 from collections import Counter def solution(k, tangerine): # 귤 종류 수 tan_uniq = 0 # 종류 별 개수 세기 type_cnt = Counter(tangerine) type_cnt = sorted(..
2023.02.10
no image
[파이썬] 프로그래머스 [1차] 뉴스 클러스터링 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 처음 풀 때는 문제 조건을 제대로 확인하지 않아, 특수 문자 / 공백을 제거해서 풀었다. 이 경우 aa1+aa2와 AAAA12가 동일해지는 문제가 생긴다. 특수 문자 / 공백을 미리 제거 하면 문제가 생기기 때문에, 알파벳 여부를 원소를 만들 때 확인했다. # 자카드 유사도 : (두 집합의 교집합 크기 / 두 집합의 합집합 크기 # 중복 문자에 대해서도 처리 가능 # 둘다 공집합인 경우 -> 1로 정의 from collections import Counter def solution(str..
2023.02.09
no image
[파이썬] 프로그래머스 n^2 배열 자르기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 $N = 10^7$이기 때문에 2 차원 배열을 선언하고, 각 성분에 값을 할당할 경우 시간 초과가 발생한다. 따라서 별도의 규칙을 찾아서 문제를 풀려고 했는데, 고민해도 생각이 안나서 다른 사람의 풀이를 참고해서 풀었다. 2 차원 행렬을 1 차원으로 펼칠 경우, 각 성분은 n으로 나눈 몫과 나머지로 표현할 수 있다. # n이 크기 때문에, n**2만 해도 시간 초과 발생! # 규칙을 찾아야 함 # 1 2 3 2 2 3 3 3 3 # (0,0) (0,1) (0,2) (1, 0) (1, 1)..
2023.02.09
no image
[파이썬] 프로그래머스 튜플 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 튜플은 원소의 순서를 고려해야 하기 때문에, 낮은 길이의 튜플부터 확인하면, 입력 순서를 확인할 수 있다. 각 성분으로 구성된 튜플을 얻기 위해서, 정규 표현식을 활용 했다. 숫자가 1번 이상 나오고, 이후 "," 와 숫자가 올 수도, 안 올수도 있도록 정규 표현식을 구성 했다. # 원소의 개수가 n, 중복되는 원소가 없는 튜플 # 튜플은 원소의 순서를 고려해야 함 -> 집합의 개수가 늘어날 수록 1 개 씩 추가 됨 # 이를 통해 튜플 원소의 순서를 알 수 있다! import re def..
2023.02.08
no image
[파이썬] 프로그래머스 위장 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 한 부위의 옷은 입거나, 안 입은 경우 2 가지만 존재한다. 입을 경우, 현재 부위에 속하는 옷 개수 만큼의 경우가 가능하고, 입지 않는 경우는 1 가지만 있다. 따라서 (현재 부위 옷의 개수 + 1)을 통해서, 모든 위장 경우의 수를 표현할 수 있다. 최소 1 개의 의상은 입어야 하기 때문에, 마지막에 1을 빼주면 전체 경우의 수를 얻을 수 있다. # n, m, k, l # nC1, mC1, kC1, lC1 -> n, m, k에 대한 선택 # 종류가 많은 경우 -> 시간 초과가 발생할 ..
2023.02.08
no image
[파이썬] 프로그래머스 행렬의 곱셈 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 행렬의 곱을 얻기 위해선 arr1의 행과 arr2 열 사이의 연산이 필요하다. arr2의 열 성분을 얻기 위해서 zip(*arr2)를 활용했다. *arr2를 통해 unpacking을 하면 각 행 별 리스트([] [] [])를 얻을 수 있고, zip을 사용하면 리스트의 n 번째 항 끼리 묶을 수 있다. 각 행의 n 번째 항 끼리 묶은 것은 결국 행렬의 열과 동일하다. # (a x b) * (b x a) = (a x a) # 행 - 열 성분 사이 곱 def solution(arr1, arr2..
2023.02.07
no image
[파이썬] 프로그래머스 괄호 회전하기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 괄호 회전을 쉽게 하기 위해서 deque.rotate를 활용했다. 올바른 괄호 쌍인지 확인하기 위해서 stack을 활용했다. # 괄호 회전 -> deque.rotate로 구현 # 올바른 괄호 여부 확인 : stack으로! from collections import deque def solution(s): # 올바른 괄호 문자열의 수 answer = 0 # 올바른 괄호 쌍 match = {"[" : "]", "(" : ")", "{" : "}"} # i 만큼 회전 for i in range..
2023.02.07