프로그래머스(파이썬)

    타켓넘버→ DFS(깊이우선탐색)★★+요소 더하기, 요소 빼기+ 재귀함수

    나의 틀린 풀이 def solution(numbers, target): return DFS(0, 0, target, 0) def DFS(L, sum, target, cnt): if L ==len(numbers): if sum == target: cnt+=1 return cnt else: DFS(L+1, sum-numbers[L], target, cnt) DFS(L+1, sum+numbers[L], target, cnt) numbers = [4, 1, 2, 1] target = 4 print(solution(numbers, target)) 성공한 나의 풀이 def solution(numbers, target): def DFS(L, sum, target, cnt): if L ==len(numbers): if..

    전화번호 목록 →기준값 갱신+startswith()+숫자문자열 정렬★★

    1차 극복 예) 119 > 119234 (접두어인 경우) false, 119 > 12119234 (중간 포함이므로 접두어 아님) true 119 > 12342119 (끝에 포함이므로 접두어 아님) true ▶ startswith() → 테스트 케이스1 극복 2차 극복 ▶ 테스트 케이스 ["11" "1"] → false가 나와야된다. 왜냐하면 아래와 같이 정렬하는 경우 ["1" "11"] → "11"안에 접두어 "1"이 있으므로 false가 나와야된다. 이러한 테스트 케이스를 극복하기 위해 미리 "문자열길이"를 기준으로 정렬해준다. (어차피 틀린 풀이) 3차 극복 ▶ break를 사용하는 경우 안쪽 for문을 종료하고, 바깥쪽 for문을 다시 수행하지만, 접두어가 포함된 문자열을 찾은 경우 return F..

    뉴스 클러스터링→isalpha(), str1[i:i+2], set(), count()★★

    나의 풀이 import re def solution(str1, str2): str1=str1.upper() str2=str2.upper() list_str1=[] list_str2=[] for i in range(len(str1)-1): if str1[i:i+2].isalpha(): list_str1.append(str1[i:i+2]) for i in range(len(str2)-1): if str2[i:i+2].isalpha(): list_str2.append(str2[i:i+2]) hap=0 gyo=0 list_str1과 list_str2에서 가장 중복되지 않는 순수한 요소로만 set을 구성한다. for s in set(list_str1+list_str2): gyo +=min(list_str1.cou..

    프린터 → 응급실(큐)+리스트 컴프리핸션 + enumerate()+ any()★★

    나의 풀이 from collections import deque def solution(priorities, location): #priorities의 val은 우선순위를 나타낸다. #우선순위가 높을 수록 먼저 출력된다. #enumerate메서드를 써서 location을 구현하였다. #location의 요소는 대기목록의 위치를 의미한다. 주의할 점은 #0이면 위치가 첫번째이고, 1이면 위치가 두 번째이다. Q =[ (pos, val) for pos, val in enumerate(priorities)] Q=deque(Q) #deque([(0, 2), (1, 1), (2, 3), (3, 2)]) #0번째 문서는 우선순위가 2이고, 1번째 문서는 우선순위가 1이고, 2번째 문서는 우선순위가 3이다. #우선순..