본문 바로가기

Python/프로그래머스

(17)
[프로그래머스] [Python] 카펫 문제 풀이 def solution(brown, yellow): answer = [] # 카펫의 전체 크기는 brown + yellow 이다. area = brown + yellow # yellow가 최소(1)일 때 area는 3 * 3의 크기를 가진다. 이는 width의 최솟값이 3이고, 최댓값이 area / 3이라는 것을 말한다. for width in range(int(area / 3), 1, -1): # area가 가로 값으로 나누어 떨어지면 if area % width == 0: # 그에 따른 세로 값을 구한 후 height = area // width # yellow는 brown을 테두리로 가진 사각형이다. 상하좌우로 크기를 -1씩 줄인, 즉 (가로-2)*(세로-2)의 크기를 가진 사각형이다. ..
[프로그래머스] [Python] 소수 찾기 문제 풀이 from itertools import permutations def solution(numbers): answer = 0 # 순열을 저장할 배열 생성 arr = [] # 슷자가 1개인 것부터 검사할 것이다. 때문에 시작이 1이고 끝도 그에 맞춰서 1을 더해준다. for i in range(1, len(numbers) + 1): # 순열을 구하는 함수 permutations. 이를 list로 받아서 per에 저장. per = list(permutations(numbers, i)) # 해당 배열을 arr에 추가. arr += per # 현재 arr 내의 각 배열에는 문자형으로, 그리고 숫자 하나씩 떨어져서 원소들이 저장되어 있다. # 이를 ''.join을 사용하여 하나로 합쳐주고, '0123'같..
[프로그래머스] [Python] 모의고사 문제 풀이 def solution(answers): answer = [] # 수포자의 찍는 방식 math_hater = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]] # 수포자의 점수 배열 answer_cnt = [] # 각 수포자(man)를 돌면서 for man in math_hater: # 점수 저장을 위한 변수. 하단의 for문을 다 돈 후 0으로 계속 초기화된다. cnt = 0 # 정답을 확인한다. for i in range(len(answers)): # 각 수포자마다 찍는 방식의 주기가 다르다. 이를 처리하기 위해서 # i % len(man), 각 수포자의 찍는 주기로 % 하여 해당 주기를 루프하도록 한다...
[프로그래머스] [Python] H-Index 문제 풀이 def solution(citations): answer = 0 # citations를 내림차순으로 정렬 citations = sorted(citations, reverse=True) # citations는 현재 가장 큰 수부터 작아지는 순으로 정렬되어 있다. # citations[i]는 인용된 횟수이고, i는 논문의 개수이다. # 즉, 인용된 횟수 citations[i](h)가 i(h)편 이상이기 위해서는 # citations[i] > i 를 충족해야 한다. for i in range(len(citations)): if citations[i] > i: answer += 1 return answer 문제 링크 programmers.co.kr/learn/courses/30/lessons/4274..
[프로그래머스] [Python] 가장 큰 수 문제 풀이 def solution(numbers): # map을 사용하여 numbers를 str타입으로 고정. numbers = list(map(str, numbers)) # 하단 설명 참조 numbers.sort(key=lambda x: x * 3, reverse=True) # ['0', '0', '0', '0'] 같이 0으로만 이루어진 배열을 대비하기 위함 # 이런 배열이 나오게 되면 "0000"으로 반환될 수 있기 때문에 # 안에서 int타입으로 변환하여 숫자를 뽑은 후 다시 str타입으로 변경하여 리턴한다. # ''.join()은 배열내의 각 문자열을 하나로 합쳐주는 내장함수이다. return str(int(''.join(numbers))) 1. lambda x : x * 3 - numbers의 ..
[프로그래머스] [Python] K번째 수 문제 풀이 def solution(array, commands): answer = [] # 시작 인덱스, 마지막 인덱스, 그리고 K번째 숫자를 commands에서 가져온다. for startidx, endidx, numK in commands: # 시작 인덱스와 K번째 숫자에 -1을 하는 이유는 배열 인덱스가 0부터 시작하기 때문이다. # 마지막 인덱스에 -1을 하지 않는 이유는 '미만'처리가 되어 마지막 인덱스가 포함되지 않기 때문이다. 즉 -1이 이미 되어있다. # array의 [시작 인덱스 - 1 부터(:) 마지막 인덱스] 까지 가져온 후 정렬하여 sorted_array에 넣는다. sorted_array = sorted(array[startidx - 1:endidx]) # K번째 숫자는 numK-1..
[프로그래머스] [Python] 이중우선순위큐 문제 풀이 import heapq def solution(operations): answer = [] # 이중 우선순위 큐 생성. heapq로 사용할 예정이다. queue = [] # 배열이 빌 때까지 while len(operations): # operations[0]의 명령어가 I 숫자라면 # .split()은 공백을 기준으로 문자열을 자르는 것이다. () 안에 원하는 값을 넣으면 그 값을 기준으로 자를 수 있다. if operations[0].split()[0] == 'I': # 큐에 주어진 숫자를 삽입한다. 이 때 heapq를 사용하여 최소값이 가장 앞으로 오도록 자동 정렬하게 한다. # int 형식으로 바꾸어 넣어서 나중에 문자가 아닌 숫자로 출력되게 하였다. heapq.heappush(queu..
[프로그래머스] [Python] 디스크 컨트롤러 문제 풀이 def solution(jobs): answer = 0 # 작업의 시작 시간 start_time = 0 # 작업의 개수 jobs_cnt = len(jobs) # 소요시간이 낮은 순으로 정렬 jobs = sorted(jobs, key=lambda x: x[1]) # jobs 배열이 빌 때까지 while len(jobs): # 현재 jobs는 소요시간을 기준으로 정렬된 상태. 이제 여기에서 시작시간이 작은 순으로 찾는 작업을 한다. for i in range(len(jobs)): # 시작시간보다 작거나 같은 값을 찾는다. 소요시간은 이미 정렬되어 있기 때문에 # 시작시간이 같거나 낮은 값 중 가장 소요시간이 작은 순으로 나오게 된다 if jobs[i][0]