본문 바로가기

programming study/Algorithm

(275)
[프로그래머스] 방금그곡 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 방금그곡 import math # #이 붙은 문자를 치환하는 함수 def replace_string(string): return string.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a') def solution(m, musicinfos): # #이 붙은 문자 치환하기 m = replace_string(m) answer = ['(None)', 0] # 기억한 멜로디 문자열의 길이 m_len = len(m) # 입력받은 곡의 갯수 songs_ea = len(musicinfos) # 한 곡..
[프로그래머스] 조이스틱 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 조이스틱 def solution(name): answer = 0 # name의 길이 name_len = len(name) # name을 리스트화 한 후 아스키 코드로 변환 name_list = list(name) # 기본 문자인 A와 목표로하는 문자의 아스키 코드 차이를 구하여 리스트에 넣기 deference_list = [] for i in range(name_len): deference = ord(name_list[i]) - 65 if deference > 12: deference = 26 - deference deference_list.append(deference) # deference_list를 ..
[프로그래머스] 메뉴 리뉴얼 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 메뉴 리뉴얼 from itertools import combinations def solution(orders, course): answer = [] # 주어진 coruse의 요소를 하나씩 접근(menu_ea: 메뉴의 갯수) for menu_ea in course: # 조합을 담을 빈 딕셔너리 선언 combinations_dic = {} # 주어진 orders의 요소를 하나씩 접근 (order: 각 손님이 주문한 단품메뉴들) for order in orders: # 각 손님이 주문한 단품 메뉴들을 기반으로, 메뉴 수만큼의 조합 만들어서 리스트로 넣기 # 오름차순 정렬을 하여, 단품 메뉴 순서를 통일화 or..
[프로그래머스] 수식 최대화 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 수식 최대화 from itertools import permutations import re # 사용할 수 있는 연산자 리스트를 생성하는 함수 def make_operation_permutations(expression): # 주어진 수식에 포함되는 연산자를 넣을 리스트 operation_list = [] # 수식에 있는 연산자 넣기 if '*' in expression: operation_list.append('*') if '+' in expression: operation_list.append('+') if '-' in expression: operation_list.append('-') operati..
[프로그래머스] 거스름돈 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 거스름돈 def solution(n, money): # 메모이제이션 # 각 인덱스에 해당하는 수를 만들 수 있는 가짓수를 기록 memo = [0] * (n + 1) memo[0] = 1 # 주어진 동전에 하나씩 접근 for coin in money: for price in range(coin, n + 1): memo[price] += memo[price - coin] answer = memo[n] % 10000000007 return answer Comment 메모이제이션을 통해서, 동전의 가치에 따라 발생하는 경우의 수를 구한다. 주어진 money로부터 가장 작은 동전 단위부터 접근하며 경우의 수를 기록..
[프로그래머스] 디스크 컨트롤러 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 디스크 컨트롤러 import heapq def solution(jobs): answer = 0 # jobs의 최소힙 jobs_heap = [] # 시작 시간, 처음에는 -1 ~ 0 범위의 작업을 찾아야하므로 -1로 초기화 start = -1 # 현재 시간 now = 0 # 완료된 작업 수 complited_jobs = 0 # 작업의 수 jobs_ea = len(jobs) # 모든 작업을 완료할 때 까지 실행 while complited_jobs < jobs_ea: # 주어진 작업을 하나씩 접근 for job in jobs: # 작업을 입력받은 시점이 시작 시간과 현재 시간의 사이인 경우 if start <..
[프로그래머스] 숫자의 표현 - 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..