프로그래머스 7

[DFS, 백트래킹, 조합] 프로그래머스 lv.2 양궁 대회

프로그래머스 lv.2 양궁 대회문제 바로가기문제 요약어피치가 양궁을 먼저 다 쐈다. 화살의 수와 어피치의 과녘 현황을 입력값으로 줬을 때, 라이언이 어떻게 과녘을 맞춰야 최대 점수차이로 이길 수 있는지 반환해라.주의할 점최대 점수 차이가 같을 경우, 낮은 점수에 많이 맞은 경우를 답으로 처리한다.배열에 해당하는 과녘은 10점 과녘부터 0점까지 순서대로 주어진다.문제 접근완전 탐색에 조기종료 조건이 가능하므로 DFS를 사용한 백트래킹과녘의 수가 고정되어 있기 때문에 점수 현황을 고정 길이의 배열로 만들어서 과녘의 선택/ 미선택 두개의 정보를 담을 수 있다.조기 종료 조건 (유망함수)남은 화살이 더이상 없을 때.과녘의 끝에 다다랐을 때.오답노트1. recursive overflow 에러 발생.- DFS 접근..

[투포인터, 정렬된 배열의 구간합] 프로그래머스 lv2. 연속된 부분 수열의 합

문제 : 연속된 부분 수열의 합 프로그래머스 문제 바로가기 조건 1. 오름차순으로 정렬된 배열 조건 2. 배열의 길이 ≤ 1,000,000 요구사항 : 구간합이 특정 값이 되었을 때, 구간의 인덱스를 반환하라 단, 여러 구간이라면 길이가 짧은 구간을 채택하고, 길이마저 같다면 시작인덱스가 작은 구간을 채택하라. 접근 배열의 크기가 10^6이기 때문에 O(n^2) 알고리즘은 사용할 수 없다. 정렬된 배열의 특성을 최대한 이용한다. 구간합에 관한 문제이기 때문에 투포인터를 사용할 수 있다. (이진탐색은 특정 값을 찾는 데 사용) 내 풀이 def solution(sequence, k): sp = 0 ep = 1 tot = sequence[0] sequence+=[0] answer = [] chance = 1 ..

[프로그래머스] lv.0 옹알이(1) - 반복문 주의

https://school.programmers.co.kr/learn/courses/30/lessons/120956# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 순열 조합으로 풀어 봄 틀린 풀이 from itertools import permutations def solution(babb): answer = 0 possible = ["aya", "ye", "woo", "ma"] cand = set() for i in range(1,5): for comb in permutations(possible, i): cand.add(''.join(comb)) #..

[스택] 프로그래머스 lv1. 크레인 인형뽑기 게임

문제 인형이 쌓인 board에서 맨 위에 인형 하나씩 moves에 따라 꺼낸다. 꺼낸 인형들은 바구니에 담는데, 바구니에 담긴 인형들은 연달아 같은 인형이 담길 경우 제거된다. 제거된 인형의 개수는? 문제 바로가기 코드 def solution(board, moves): bucket = [] for j in moves: # 각 열에 있는 인형들 꺼내서 바구니에 담기 for i in range(len(board)): if board[i][j-1] != 0: bucket.append(board[i][j-1]) board[i][j-1] = 0 break cnt = 0 while True: long = len(bucket) # 더이상 인형제거가 발생하지 않는지 확인하기 위해 for i in range(1,len(..

⚡️algorithm 2022.05.30

[정렬/파이썬] 프로그래머스 lv2. 가장 큰 수 (feat. sort 메서드)

문제 숫자로 이루어진 배열을 조합해 가장 큰 수를 만들어라 주의 from itertools import combinations, permutations 순열이나 조합을 그대로 사용하면, 시간초과가 뜬다. 결정적인 차이 내코드 numbers.sort(key=lambda x: str(x), reverse=True) >>> [9, 5, 34, 30, 3] sorting 키를 사전순으로 함. 참고코드 nums_s.sort(key=lambda n : n*3, reverse=True) 참고 블로그 >>> [9, 5, 34, 3, 30] sorting 키를 x3한 숫자의 사전순으로 함. 3이 30보다 먼저 나와야 330 > 303 으로, 더 큰 수를 만들기 위한 정렬이다. *3 (곱하기 3) 이 왜 필요하냐면, 10..

⚡️algorithm 2022.05.24

[정렬] 프로그래머스 lv2. h-index

문제 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 시간 초과를 주의해야 한다. 내 코드 import heapq as hq def solution(article): answer = 0 hq._heapify_max(article) # 내림차순 정렬 h = 0 for h in range(article[0]): # 가장 큰 값 기준으로 반복문 돌기 cnt = 0 for i in article: if i >= h: cn..

⚡️algorithm 2022.05.24

[해쉬] 프로그래머스 lv2. 위장

문제 링크 옷의 조합 수를 구하는 문제였다. 원소가 한 개 이상인 조합을 하되, 카테고리별로 하나씩만 선택할 수 있는 조건이다. 카테고리가 0,1,2 인 옷들을 입력 받았을 때 각 카테고리별로 2가지, 2가지, 1가지라면, 00 11 2 로 표현할 수 있다. 이때 1개 이상을 고르는 조합이다. 문자열을 따로 받을 필요없이 (3₩3₩2-1)만 구하면 된다. 이 식은 각 카테고리의 옷 수 +1 을 곱해서 1을 빼주는 것이다. 옷 수 +1 을 해주는 이유는 해당 카테고리에서 아무것도 선택하지 않는 가지수를 포함시켜주기 위함이고, -1 은 전체에서 아무것도 선택하지 않는 것을 빼주는 것이다. 회고 count 함수 나는 계산식까지는 알았는데 이를 코드로 딕셔너리를 이용해 구현하는 방법을 몰랐다. 아래 참고한 코드..

⚡️algorithm 2022.05.20
1