목록알고리즘 PS (108)
DevKim
programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr [ 알고리즘 ] 구현 [문제 접근] 1. 파이썬의 정규표현식을 이용하여 -,+,* 부호만 뽑아낸 후 2. permutations 순열을 이용하여 해당 연산자로 나타낼 수 있는 조합을 따로 리스트에 담아줌 3. 연산을 쉽게 하기 위해서 숫자로만 이루어진 num 리스트와 부호로만 이루어진 cul 리스트를 정규표현식 re를 이용하여 따로 담아줌 4. 우선순위 부호부터 하나씩 순회..
programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr [ 알고리즘 ] 구현 [문제 접근] 1. combonations 를 이용해 조합을 구해주었고 2. Counter을 이용해 나온 횟수를 구해주었다. 처음엔 collections 에 있는 defaultdict을 이용해서 문자열들의 조합을 하나씩 세주고, 그 후 정렬을 한 후에 최대값과 같은 애들을 하나씩 구해줬는데 그렇게하니 실행 케이스에서 2개 정도 시간 초과가 나서 아예 처음부..
programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr [ 알고리즘 ] 그리디 [문제 접근] 1. 앞에서 부터 큰 수가 와야한다는 점 2. 삭제되는 값이 k개 이어야한다는 점 3. "9999"와 같이 같은 수로 이루어진 문자열이 존재하는 경우를 고려 4. k개가 아직 다 삭제되지 않았는데 문자열을 모두 순회했을 경우를 고려 이렇게 4가지를 염두해두고 풀이한 문제이다 que를 이용하여 문자열을 하나씩 담아주고, 해당 문자열이 이미 que에 들어가있는 숫자보다 크다면, 즉 이미 que에 담긴 숫자가 해당 숫자보다 작다면 pop으로 삭제를 해준다. 이때 k < 0 이면 더 이상 pop을 진행하면 안되기 때문에 k..
programmers.co.kr/learn/courses/30/lessons/12949 코딩테스트 연습 - 행렬의 곱셈 [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]] programmers.co.kr [ 알고리즘 ] 구현 [문제 접근] 행렬의 곱을 할 줄 아는 사람이라면 어떻게 구할지는 빠르게 생각났을 문제. 하지만 3중 for문을 사용해서 이중 리스트에 넣는 과정이 헷갈릴 수는 있겠다 [코드] def solution(arr1, arr2): x1=len(arr1) #행 x2=len(arr1[0]) #열 y1=len(arr2) #행 y2=len(arr2[0]..
programmers.co.kr/learn/courses/30/lessons/70129 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr [ 알고리즘 ] 구현 [문제 접근] 파이썬의 문자열 핸들링에 한번 더 감탄한 문제. 파이썬은 문자열을 다루는데에 정말 특화된 것 같다 replace를 이용하여 0을 모두 없애주고 이진법으로 변환 반복, [코드] def solution(s): cnt1=0 cnt2=0 while s!='1': cnt2+=s.count('0') s=s.replace('0','') #0없앰 n=len(s) s='' while n!=0: s=str(n%2)+s n=n//2 cnt1+=1 answer=[cnt1, cnt2] return answer #이진 변환의 횟수, 과정..
programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr [ 알고리즘 ] 구현 [문제 접근] 처음에 생각한대로 구현했을 때 자꾸 틀려서 이상하다고 생각했었는데, 모든 수를 한꺼번에 최소공배수를 구하는게 아니라, 두개씩 최소공배수를 구해서 최종적으로 나온 최소공배수를 채택하면 되는 일이었다. 3개 이상의 최소공배수를 구하는 방법을 까먹다니.. 살짝 충격 ㅎㅎ [코드] import math f..
programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr [ 알고리즘 ] 그리디 [문제 접근] 이 문제를 풀때, 고려해야할 변수는 두가지이다 1. 해당 알파벳을 찾을 때 다음 알파벳을 찾는게 더 빠른 방법인지, 뒤로 가면서 찾는 방법이 더 빠른지 (ex. A->Z ) 2. 커서를 움직일 떄 왼쪽으로 움직일 것인지, 오른쪽으로 움직일 것인지 문제의 핵심은 2번이라고 생각한다. 카운팅한 알파벳은 'A'로 바꿔주고 '..
[ 알고리즘 ] 완전탐색,구현 [문제 접근] 주어진 numbers로 만들 수 있는 순열을 구해서 ( [1,2], [2,1] 은 다른 것임 ) 소수를 구할 땐 효율성을 위해 에라토스테네스의 체를 이용하여 구현하였다 [코드] from itertools import permutations def solution(numbers): answer = 0 n=len(numbers) #문자열 num=list(numbers) #리스트 result=[] #해당 숫자 조합으로 만들 수 있는 모든 숫자 조합 List=[] for i in range(1,n+1): List.append(set(permutations(num,i))) #체를 이용하여 해당수로 만들 수 있는 최댓값까지의 소수들 찾기 num.sort(reverse=T..