no image
[파이썬] 프로그래머스 구명보트 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 한 번에 최대 2명을 태울 수 있기 때문에, 최적의 구성은 무거운 사람 + 가벼운 사람을 태울 경우다. 무거운 사람, 가벼운 사람의 무게 합이 제한 무게를 넘는지 확인하기 위해서, 무게 순으로 people을 정렬 했다. 정렬 뒤엔 시작 점과 끝 점을 비교하기 위해서 투 포인터를 활용했다. # 한 번에 최대 2명 # 최적 -> 무거운 사람 + 가벼운 사람 def solution(people, limit): people.sort() answer = 0 # 투포인터 시작 - 끝 점 start,..
2023.02.02
no image
[파이썬] 프로그래머스 카펫 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 노란 박스의 가로, 세로 정보에 따라서 갈색 박스의 정보가 결정 된다. 노란 박스의 가로, 세로는 박스 수의 약수이고, 가로는 그 중에서 큰 값이다. 따라서 노란 박스의 약수를 큰 수 부터 역으로 완전 탐색하면 문제를 풀 수 있다. 탐색 범위에 대해선, 가로의 길이가 세로 길이 보다 크거나 같기 때문에 제곱근 범위 까지만 찾으면 된다. # 노란 박스 정보 : 가로 x 세로 # brown = ((가로 + 2) * 2 + 세로 * 2) def solution(brown, yellow): an..
2023.02.01
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
[파이썬] 프로그래머스 다음 큰 숫자 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. 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
[파이썬] 프로그래머스 기사단원의 무기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 약수의 개수는 약수의 정의와 소인수 분해의 성질로 확인할 수 있다. 약수(소인수)를 찾기 위해서 1(2) ~ N까지 전부 확인할 경우, 시간 복잡도는 $O(N^2)$이 돼 시간 초과가 발생한다. 약수(소인수) 탐색은 $\sqrt N$ 만큼만 확인해도 되는 점을 활용하면, 시간 복잡도를 $O(N\sqrt N)$으로 줄일 수 있다. from collections import defaultdict # 성분의 곱을 계산할 수 있다. from math import prod # 약수 개수 구하기 1..
2023.01.20
no image
[파이썬] 프로그래머스 숫자 짝꿍 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 공통된 숫자를 미리 확인한 뒤 필요한 숫자만 개수를 확인했다. 하지만 확인할 숫자의 개수가 10개 뿐이어서 굳이 그럴 필요는 없었던 거 같다. 0이 여러번 반복되는 문자열을 처리하기 위해서 정규 표현식을 사용 했다. from collections import Counter import re def solution(X, Y): answer = "" # 문자열로 변경 X, Y = map(str, (X, Y)) # 공통 숫자 확인 com_num = sorted(set(X) & set(Y), r..
2023.01.19