전체 글40 [백준] 1343 폴리오미노 - Python 문제 1343번: 폴리오미노 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net 이 문제는 그리디 알고리즘으로 해결할 수 있는 문제로 문제 아이디어는 다음과 같습니다. 폴리오미노 2개(AAAA, BB)를 무한대만큼 가지고 있을 때, 겹침없이 X를 모두 폴리오미노로 덮어야 합니다. AAAA는 BB의 배수이기 때문에 항상 최소한의 교체로 최적의 해를 가질 수 있습니다. 풀이 1 - Python s = input() idx = 0 answer = '' while idx 2023. 5. 24. [프로그래머스] 구명보트 - Python 문제 접근 방식 그리디와 투포인터를 이용해 해결할 수 있는 문제입니다. 이 문제는 마땅한 해결책을 찾지 못해 레퍼런스를 보며 이해한 문제입니다. 투포인터를 활용하기 위해 먼저 몸무게가 저장된 리스트를 오름차순 정렬해줍니다. 이 후, 시작 인덱스와 끝 인덱스를 각각 0과 len(무게 리스트)-1로 지정해 줍니다. 이 후, 시작 인덱스가 끝 인덱스보다 작거나 같을 동안, (가벼운 사람의 무게 + 무거운 사람의 무게) limit값 보다 작거나 같으면 시작 인덱스를 +1 해주고, 그렇지 않은 경우에는 끝 인덱스에 -1을 설정해줍니다. 시작 인덱스를 +1, 끝 인덱스를 -1로 설정한 부분은 각각 더 큰 값과 작은 값을 찾아 나가기 위해 지정한 걸로 이해하면 될 것 같습니다. 모든 사람을 구출하기 위해 필요한 구명.. 2023. 3. 30. [프로그래머스] 큰 수 만들기 - Python 문제 접근 방식 리스트 자료구조를 활용하여 앞에서 부터 숫자를 비교해가며 [리스트에 저장 된 값 0 and stack[-1] < i: stack.pop() k-=1 stack.append(i) return ''.join(stack[:-k].. 2023. 3. 29. [백준] 1654 랜선 자르기 - Python 문제 1654번: 랜선 자르기 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 위 문제는 주어진 k개의 랜선들을 잘라서 최대 N개가 되도록 만들어 줄 때, 자른 길이의 최댓값을 구해주는 문제입니다. 이를 해결하기 위해서는 이분 탐색을 활용해야 하는데요. (이분 탐색은 “~와 ~사이에 답이 있다.”의 경우에 사용하면 해결에 도움이 될 수 있습니다.) 이분 탐색을 활용하기 위해선 범위를 지정해주어야 하는데, 위 문제의 경우에는 1 ~ (K개의 랜선들 중 최댓값) 까지 범위를 두고 좁혀.. 2023. 3. 2. [CI/CD] Github Actions + Docker를 활용한 CI/CD 구축기 개요 "데브루틴"이라는 프로젝트를 진행하며 Gitlab을 활용하여 CI/CD Pipeline을 구축했었습니다. 사실 Gitlab으로 CI/CD 파이프라인이 구축되어 있어도 크게 문제는 없었지만, 무중단 배포가 구축되지 않은 상태였습니다. 또한, 버전 관리 시스템 또한 GitLab이 아닌 Github로 변경하자는 의견이 나왔기 때문에 GitLab에서 Github로 이주함과 동시에 배포 부분을 개편하고자 하였습니다. 어떻게 개선할건데? 기존 파이프라인은 push 할 경우 도커 이미지를 Gitlab의 자체 컨테이너 레지스트리에 올리고, 배포 서버에서 이를 pull 받아오는 형식으로 진행되고 있었습니다. 무중단 배포는 차차 구축해보는 것으로 하고, 일단 위 흐름과 동일하게 Github Actions를 활용하여 .. 2023. 3. 1. [백준] 12891 DNA 비밀번호 - Python 문제 이 문제는 주어진 문자열의 길이가 100만 까지 제한이 있으므로 O(n)의 시간 복잡도 알고리즘으로 해결해주어야 합니다. 따라서, 모든 경우의 수를 따질 수 없게 되고, 이는 슬라이딩 윈도우를 활용하여 해결할 수 있습니다. 슬라이딩 윈도우는 2개의 포인터로 범위를 지정한 다음, 이 범위를 유지한채로 문제에서 주어지는 특정 조건을 만족하도록 구현하는 것 입니다. 코드를 통해 알아보도록 하겠습니다. Python #비밀번호 def is_valid_password(check, a, c, g, t): if check['A']>=a and check['C']>=c and check['G']>=g and check['T']>=t: return True s,p=map(int,input().split()) dna_.. 2023. 2. 28. 이전 1 2 3 4 5 6 7 다음