Computer Science/알고리즘 179

[프로그래머스 - Python] 154538 - 숫자 변환하기

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 DP를 이용해서 문제를 풀었다. 조금 더 최적화를 하기 위해서 for loop의 범위에도 제한을 주었고, 아래의 조건에도 제한을 주었다. BFS로 풀까 잠시 고민했는데, x = 1이고, y = 1,000,000이고, n = 1일 경우에 제일 빠른 경우는 19번이다. 첫 번째 단계에서 3개, 두 번째 단계에서 3^2개.... 19번째 단계에서는 3^19개.. 가 생..

[프로그래머스 - Python] 154540 - 무인도 여행

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 이중 for loop를 사용하여, 모든 맵을 훑는다. 이때 무인도인데, 방문한 적이 없다면 BFS를 통해 연결된 무인도를 찾고, 먹을 수 있는 모든 음식을 찾는다. 이를 append 하고, 반환은 정렬해서 반환하도록 한다. 2. 코드 from collections import deque def solution(maps): def bfs(y, x): food = i..

[프로그래머스 - Python] 42883 - 큰 수 만들기

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 예전에 오등큰수와 크게 만들기를 푼 적이 있는데, 해당 알고리즘을 그대로 사용했다. 아래 내용을 참고하면 좋을 것 같다. 2023.08.25 - [Computer Science/알고리즘] - [백준 - Python] 2812 - 크게 만들기 [백준 - Python] 2812 - 크게 만들기 0. 문제 링크 https://www.acmicpc.net/problem/2..

[프로그래머스 - Python] 67257 - 수식 최대화

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 우선 입력으로 들어오는 수식을 +, -, *로 쪼개서 저장을 해야 한다. 이를 위하여 re를 사용했다. 또한 우선순위를 위해서는 모든 경우의 수를 따져야 하는데, 이를 위해서 itertools.permutations를 사용했다. eval을 통해서 문자열인 수식을 계산하고, 다시 방정식에 넣는 방식으로 문제를 해결했다. 이때 whlie문을 사용해서 인덱스를 조절했는데..

[프로그래머스 - Python] 68936 - 쿼드압축 후 개수 세기

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/68936 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 Divide and Conquer 방식을 사용했고, 트리 내에서는 반복문을 사용하여 문제를 해결하였다. 첫 번째 숫자인 bef와 반복문에서 나오는 숫자가 다를 경우 압축이 불가능하므로, 해당 트리를 사등분하여 재귀를 호출했다. 사등분 한 쿼드 트리를 모두 호출한 이후에는 return을 함으로써, 반복문을 바로 종료했다. -> 트리를 사등분하면 더 이상 볼 필요가 없..

[프로그래머스 - Python] 42583 - 다리를 지나는 트럭

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 이 문제는 deque를 사용하여, 실제 다리와 트럭의 움직임을 구현하면 된다. 만약 새로운 트럭이 올라갈 수 없는 상태라면. 0을 append 함으로써 빈 공간을 표현한다. 2. 코드 from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 dq = dequ..

[프로그래머스 - Python] 86052 - 빛의 경로 사이클

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/86052 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 일단 문제에서 체크해야 되는 요소가 방향, 위치, 다음 경로이다. 사실 방향, 위치, 다음 경로는 구현의 영역이기 때문에 개인 역량에 따라 달라진다. 아무튼 우리는 사이클을 확인해야 하는데, 나는 추가적으로 check를 사용해서 해결했다. check는 [y 좌표][x 좌표][4방향]으로 확인하는데, 특정 좌표에서 특정 방향으로 간 적이 있다면 True로 표시한다. ..

[프로그래머스 - Python] 118667 - 두 큐 합 같게 만들기

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 이 문제는 큐 두 개를 완전 탐색으로 해결하면 안 된다. 큐의 길이는 최대 300,000이기 때문에, 시간 초과가 날 우려가 있다. 따라서 문제를 조금 더 멀리서 생각을 해보면, 모든 원소의 순서는 일정하다로 결론이 난다. 따라서 Circle Queue처럼 생각할 수 있다. 그 원형 큐에서 적당히 가림막을 설치하고, 가림막 안의 원소와 가림막 밖의 원소의 합이 같..

[프로그래머스 - Python] 142085 - 디펜스 게임

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/142085 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 일단 문제를 보면 최소 비용으로 막아야 되는 게 확실하고, K개는 무손실로 막을 수 있다. 따라서 적군이 들어올때마다 힙에다가 집어넣는다. 만약 힙의 크기가 K를 넘는다면, 가장 작은 적군의 수를 빼서 나의 병사에서 뺀다. 결론적으로 가장 작은 적군만 선택해서 막은 상태가 된다. 2. 코드 import heapq def solution(n, k, enemy): a..

[프로그래머스 - Python] 150368 - 이모티콘 할인행사

0. 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 풀이 방법 문제를 보고 어떤 알고리즘을 써야 할지 좀 고민을 했다. 결론적으로 BF를 사용했는데, 이유는 최대 유저는 100명, 최대 이모티콘은 7개, 할인율은 4개 이므로 약 160만이기 때문이다. 따라서 완전 탐색을 하기로 결정했고, itertools.product를 사용해서 해결했다. 2. 코드 # 할인율이 증가 -> 구매 인원 증가 -> 구매 비용 증가 -> 서비스 ..