본문 바로가기

programming study/Algorithm

(275)
[프로그래머스] 튜플 - 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] ..
[프로그래머스] 땅따먹기 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 땅따먹기 def solution(land): answer = 0 # land의 행 길이 land_len = len(land) # 주어진 2차원 리스트 land의 한 행씩 접근 # 다음 행의 해당 열에는 현재 행의 해당 열을 제외한 요소들 중 최댓값 구하기 # 그 이후, 다음 행의 해당 열의 값을 더한 후, 메모이제이션 (누적합) for i in range(land_len - 1): land[i + 1][0] = max(land[i][1], land[i][2], land[i][3]) + land[i + 1][0] land[i + 1][1] = max(land[i][0], land[i][2], land[i][..
[프로그래머스] JadenCase 문자열 만들기 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # JadenCase 문자열 만들기 def solution(s): s_arr = s.split(' ') for i in range(len(s_arr)): s_arr[i] = s_arr[i].capitalize() return ' '.join(s_arr) Comment capitalize 내상 함수로 간단하게 풀 수 있었다. 가장 첫 글자의 알파벳을 대문자로 바꿔주는 함수인데, 주어진 s를 split을 사용해서 공백을 기준으로 나눈 뒤, 만들어진 문자열 리스트의 원소를 하나씩 접근하여 capitalize를 하여 첫문자만 대문자로 바꿔주도록 하였다. 그 이후에는 join으로 공백을 기준으로 문자열을 생성하도록 하..
[프로그래머스] 추석 트래픽 - python 풀이 본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다 파이썬 코드 # 추석 트래픽 # 첫시간, 끝시간 각각으로부터 1초가 경과되었을 때 포함되는 로그 구하기 def get_cnt(time, lines_start_and_end): cnt = 0 start = time # 1초 경과 end = time + 1 # 시작시간과 끝시간이 있는 2차원 리스트 하나씩 접근 for start_and_end in lines_start_and_end: # 끝시간이 start보다 이후일 때는 포함 # 시작시간이 end보다 이전일 때도 포함 if start_and_end[1] >= start and start_and_end[0] < end: cnt += 1 return cnt def soluti..