본문 바로가기
728x90

완전탐색3

[python] 프로그래머스_카카오21_메뉴 리뉴얼 (완전탐색, combinations) 문제 풀이 itertools 에서 combinations 을 import 해서 문자열의 조합을 이용한다. combinations 를 사용하면 아래처럼 각 튜플에 하나의 조합이 각 원소별로 쪼개져서 출력되므로, 필요에 따라 후처리가 필요하다. a = 'abcd' b = list(combinations(a,2)) print(b) for i in range(len(b)): b[i] = ''.join(b[i]) print(b) 문제는 order 문자열을 순회하면서 각 주문별로 모든 조합의 개수를 foodMap으로 카운트하고, 세트의 메뉴 개수별 max값을 카운트해둔다. 그리고 마지막에 course를 순회하면서 foodMap에서 value값이 maxCnt와 동일한 key만 answer에 append하고 마지막에 .. 2022. 2. 21.
[python] 프로그래머스_문자열 압축 (완전 탐색) 문제 풀이 입력으로 주어지는 문자가 1000 이하이기 때문에 완전탐색을 수행할 수 있다. 길이가 N인 문자열이 입력되면 1부터 N/2 까지의 모든 수를 단위로 하여 문자열을 압축하는 모든 방법을 확인하고, 가장 짧게 압축되는 길이를 출력하면 된다. 구체적인 방법은 step 사이즈로 문자열을 잘라서 prev에 저장해두고, 다음 위치를 step 사이즈로 자르고 prev와 똑같은지 비교하면서 진행한다. def solution(s): answer = len(s) # step을 1부터 문자열 길이 반까지 늘려가며 확인 for step in range(1, len(s)//2 +1): compressed = "" prev = s[0:step] # 앞에서 부터 step 만큼의 문자열 추출 count = 1 # step.. 2022. 2. 14.
[python] 프로그래머스_카펫 (완전 탐색) 문제 풀이 카펫 그림을 보고 가로길이 = a, 세로길이 = b 로 두고 조건에 부합하는 식을 만들고 for 문 돌면서 if 문으로 조건에 맞는 경우를 찾으면 된다. def solution(brown, yellow): total = brown + yellow for b in range(1, total+1): if total/b % 1 == 0: a = total/b if a>=b: if ((a-2)*(b-2) == yellow) and (2*a + 2*b -4 == brown): return [int(a),int(b)] 2022. 2. 14.
728x90