본문 바로가기

Python

(67)
[프로그래머스] 키패드 누르기 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 키패드 누르기 def solution(numbers, hand): answer = '' # 키패드를 2차원 리스트로 표현했을 때, 각 숫자의 인덱스를 나타내는 딕셔너리 # key: 숫자, key value: 숫자의 인덱스 [x, y]로 표현 numbers_dic = { 1: [0, 0], 2: [0, 1], 3: [0, 2], 4: [1, 0], 5: [1, 1], 6: [1, 2], 7: [2, 0], 8: [2, 1], 9: [2, 2], '*': [3, 0], 0: [3, 1], '#': [3, 2] } # left, right의 처음 위치 left = [3, 0] right = [3, 2] # 입력..
[프로그래머스] 숫자의 표현 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 숫자의 표현 def solution(n): answer = 0 # 완전탐색으로 만족하는 방법의 수 구하기 # 시작 수 start = 1 # 시작 수가 n을 이하일 때 반복 while start n: break # start를 1 더하여 다음 숫자부터 완전탐색 start += 1 return answer Comment 완전탐색으로 자연수 n을 연속한 자연수들로 표현하는 방법을 구한다. 시작수를 1부터 n이 될때까지 연속되는 누적합을 각 경우에서 구하고 n이 되는 경우만 카운트하면 된다. while을 사용하여, 시작수가 n이하일 때 실행하도록 하고 그 안의 for문에서 시작수로부터 n까지 i를 더하여 누적합을..
[프로그래머스] 구명보트 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 구명보트 from collections import deque def solution(people, limit): answer = 0 # 입력받은 사람의 몸무게를 오름차순으로 정렬 people.sort() # deque 자료형으로 변환 people = deque(people) # 구명보트의 개수를 세기 # people이 빌때까지 진행 while people: # 한 명만 남은 경우 보트를 보내고 반복문 중단 if len(people) == 1: answer += 1 break # 현재 남은 사람중에서 가장 가벼운 사람과 가장 무거운 사람이 보트에 탈 수 있는 지 검사 if (people[0] + peopl..
[프로그래머스] 튜플 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 튜플 def solution(s): answer = [] # 입력받은 s 문자열의 괄호와 끝 괄호를 제거하고 리스트 형태로 변환 s_list = s.replace('{', '').replace('}}', '').split('},') # 각 원소의 길이를 기준으로 정렬 s_list.sort(key=len) # s_list의 문자열을 각각 접근 for string in s_list: # 문자열을 정수화 하고 리스트화 하여 nubmers에 넣기 numbers = list(map(int, string.split(','))) # numbers의 숫자를 하나씩 접근하며 답 리스트에 없는 경우에만 append for ..
[프로그래머스] 최고의 집합 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 최고의 집합 def solution(n, s): # 자연수의 개수 n보다 s의 크기가 작은 경우는 불가능 if n > s: return [-1] # 합이 s가 되는 자연수들의 리스트 s_sum_list = [] # 각 자연수 간의 차이를 최소화할 최적의 수 optimized_number = s // n # s_sum_list에 최적의 수를 n 만큼 넣었을 때의 나머지 optimized_left = s % n # 최적의 수를 n만큼 넣기 for i in range(n): s_sum_list.append(optimized_number) # optimized_left가 0보다 큰 경우 optimized_numb..
[프로그래머스] 줄 서는 방법 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 줄 서는 방법 import math def solution(n, k): # 줄서는 사람 people = [_ for _ in range(1, n + 1)] # 답을 넣을 리스트 answer = [] while (n != 0): # 한 사람이 앞에 줄을 섰을 때의 경우의 수 each_first_cases = math.factorial(n) // n # k번째를 구하기 위해 한 사람이 앞에 줄을 섰을 때의 경우의 수를 지나간 수 passed = k // each_first_cases # 나머지를 k에 넣기 k = k % each_first_cases if k == 0: answer.append(people.p..
[프로그래머스] 야근 지수 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 야근 지수 import heapq def solution(n, works): answer = 0 h = [] # 입력받은 works를 최대힙으로 변환 (부호 반대로 입력) for work in works: heapq.heappush(h, -work) # n이 0이 될 때까지 h의 모든 요소가 최소가 되도록 빼기 while n != 0: n -= 1 # 현재 시점에서 가장 최대인 요소 max_work = -heapq.heappop(h) # 최대인 요소가 0이면 반복문 중단 if max_work == 0: break # 1을 빼고 h에 넣기 max_work -= 1 # 최대힙이므로 부호를 반대로 넣기 heap..
[프로그래머스] 베스트앨범 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 베스트 앨범 def solution(genres, plays): answer = [] # 주어진 곡의 갯수 song_ea = len(genres) # genres, plays의 정보를 필요한 형태로 저장할 딕셔너리 total_dic = {} # 곡의 갯수만큼 genres, plays의 각 인덱스에 접근하기 for i in range(song_ea): # total_dic의 key에 장르가 없는 경우 if genres[i] not in total_dic.keys(): # 새로운 key를 생성하고 하위 딕셔너리 만들기 # 하위 딕셔너리에 장르 별 총 재생수를 입력할 total key 생성 후 plays[i] ..