[백준/Python] 15988번 - 1, 2, 3 더하기 3
·
Algorithm/BaekJoon
import sys input = sys.stdin.readline DIV = 1000000009 dp = [1, 2, 4, 7] for _ in range(int(input())): # 방법의 총 수 dp, 순서 바꾸는 것도 포함이네.. n = int(input()) for i in range(len(dp), n): # 알아서 1, 2, 3이 각각 들어갈 것 -> 겹치는게 없음 dp.append((dp[i-1] + dp[i-2] + dp[i-3]) % DIV) print(dp[n-1]) 점화식은 발견 했는데 시간 초과, 메모리 초과를 어떻게 해결해야할지 생각해내는게 어려웠다. 이를 해결한 방법은 다음과 같다. 1. 모든 테스트케이스는 같은 DP 값을 가지니 DP를 global 하게 사용 2. 이미 있는..
[백준/Python] 2748번 - 피보나치 수 2
·
Algorithm/BaekJoon
import sys input = sys.stdin.readline n = int(input()) dp = [0] * (n+2) dp[0], dp[1], dp[2] = 0, 1, 1 for i in range(2, n+1): dp[i] = dp[i-1] + dp[i-2] print(dp[n]) 간단한 피보나치 문제!
[프로그래머스/Python] 구명보트
·
Algorithm/Programmers
def solution(people, limit): boat = [] people.sort() light = people[0] idx = 0 for i in range(len(people)-1, -1, -1): if idx > i: break person = people[i] if person + light > limit: # 가장 가벼운 사람이랑도 못앉으면 혼자 가야지 boat.append(person) continue # 가장 가벼운 사람이랑은 같이 앉아갈 수 있다! 그럼 앉아가슈 if idx < i: boat.append(person + light) idx += 1 light = people[idx] continue # 앉아갈 짝이 없으면 혼자 가렴 boat.append(person) return ..
[프로그래머스/Python] 베스트앨범
·
Algorithm/Programmers
dictionary 하나로 풀어보려고 했는데 도저히 각이 안나와서 그냥 dictionary 2개를 썼다 그래서 풀이가 좀 더럽긴하지만,, 일단 맞았으니 올려본다 def solution(genres, plays): album_by_genre = {} # genre, (play, index) plays_by_genre = {} # (genre, plays) for i, play in enumerate(plays): g = genres[i] if g in plays_by_genre: plays_by_genre[g] += play album_by_genre[g].append((play, i)) else: plays_by_genre[g] = play album_by_genre[g] = [(play, i)] for..
[프로그래머스/Python] 의상
·
Algorithm/Programmers
백준 '9375번, 패션왕 신해빈' 문제와 완전 똑같기 때문에 풀이도 똑같다. 해당 문제 풀이는 여기 참고! def solution(clothes): closet = {} for cloth, type in clothes: if type not in closet: closet[type] = 1 closet[type] += 1 answer = 1 for k, v in closet.items(): answer *= v return answer - 1
[프로그래머스/Python] 전화번호 목록
·
Algorithm/Programmers
처음 풀었던 방법인데 효율성 테스트 3,4 에서 시간초과가 뜬 코드다 def solution(phone_book): p = [] answer = True for num in sorted(phone_book, key = lambda x: len(x)): for prefix in p: if num[:len(prefix)] == prefix: answer = False else: p.append(num) if not answer: break return answer startswith 도 써보고, 길이로 정렬이 아닌 그냥 문자열 정렬을 해주기도 했지만 계속 시간 초과가 나서 풀이 과정에 뭔가 생각의 전환이 필요함을 느꼈다!! 참고로 문자열 숫자 정렬은 숫자 크기가 아닌, 앞의 글자 숫자 크기로 정렬을 한다(내..