Programmers 60

[프로그래머스 / 파이썬 풀이] 피로도

from itertools import permutations def solution(k, dungeons): answer = -1 per_dg = permutations(dungeons, len(dungeons)) for i in per_dg: piro = k cnt = 0 for j in i: if piro >= j[0] and piro-j[1] >= 0: piro -= j[1] cnt += 1 else: break if answer < cnt: answer = cnt return answer 각 던전들의 모든 경우의 수를 생각한 순열 배열을 만든 후, 모든 경우 중 최대 던전을 돈 횟수를 출력한다. (처음에 permutations(dungeons, len(dungeons) 에서 len(dungeon..

Programmers 2023.01.05

[프로그래머스 / 파이썬 풀이] 카펫

def solution(brown, yellow): answer = [] garo = brown // 2 + 1 for i in range(garo, 0, -1): for j in range(1, garo+1): if (i * 2) + ((j - 2) * 2) == brown and j - 2 > 0: if (i-2) * (j-2) == yellow: answer.append(i) answer.append(j) return answer return answer 갈색의 테두리는 무조건 1줄 임을 감안하여 풀이해야 한다. 갈색의 테두리가 제공 된 갈색의 개수만큼이고, 그 범위는 무조건 두줄 이상이기 때문에 절반으로 나눠 시간을 단축시킨다. 갈색테두리의 가로를 i 세로를 j 로 두고 세로는 0보다 커야 하므로..

Programmers 2023.01.05

[Programmers / Python 풀이] 전화번호 목록

def solution(phone_book): answer = True dic = {} for i in phone_book: dic[i] = 0 for j in phone_book: search = '' for k in j: search += k if search in dic and search != j: answer = False return answer return answer 해시를 이용한 풀이. (처음에 접근을 잘못해서 도움을 받고 풀었다.) 폰번호를 딕셔너리에 키값으로 저장하고 순회를 통해 앞 문자열부터 하나씩 붙여가면서 그 붙인 문자열이 만약 접두어 이고, 그 접두어 자체의 번호가 아니라면 접두어가 포함 된 다른번호이므로 false

Programmers 2023.01.04

[Programmers / Python 풀이] 완주하지 못한 선수

def solution(participant, completion): answer = '' dic = {} for i in participant: if i in dic: dic[i] += 1 else: dic[i] = 1 for j in completion: if j in dic: dic[j] -= 1 for i, j in dic.items(): if j == 1: answer = i return answer 효율성 따지지 않고 마구잡이로 푼 방식.. dictionary의 카운트 방식을 통해 마지막 남은 1명을 잡아내는 방식이다. 다른 사람들의 방식을 몇가지 알아보자면 1. 정렬을 통한 방식 def solution(participant, completion): participant.sort() compl..

Programmers 2023.01.03

[Programmers / Python 풀이] 주식가격

def solution(prices): answer = [] for i in range(len(prices)): cnt = 0 for j in range(i+1, len(prices)): if prices[i] prices[j]: cnt += 1 break answer.append(cnt) return answer 문제의 이해가 가장 어려웠던 문제. 처음엔 접근을 현재 가격 이후에 가격들 중 크거나 같은 가격을 찾는 방법을 사용했는데 테스트케이스만 맞고 전부 틀려버렸다. 문제 이해를 위해 질문하기 메뉴로 가서 문제를 훑어보니 핵심은 가격이 떨어지지 않은 기간 이었다. 즉 3 초-> 4초 를 갈 때 가는 그 1초를 버텼으니 1초인 것이다. (이후에 올라간 가격은 생각하지 않는다. 이미 떨어진 부분에서 끝이..

Programmers 2023.01.03
LIST