본문 바로가기

전체 글109

백준 실버1 1149. RGB거리 (python) RGB거리 풀이 양옆의 집의 색이 모두 달라야 한다는 조건이다. 빨강, 초록, 파랑 중 하나로 칠해야하는데, 이 3가지를 이용해 모든 집을 가장 최소비용이 나오도록 칠해야 하는 문제다. 아래처럼 풀었다. 집의 갯수 N과 집마다 칠 할 때 비용을 입력받음. 각 집을 칠하는 비용 최솟값을 저장할 배열을 생성. 맨 처음 집을 칠할 때 비용을 미리 작성 각 집을 돌면서 지금까지의 비용을 산정, 이때, 빨강, 초록, 파랑의 색을 고르되 이전 집과의 색이 다르도록 비용을 산정 모든 집이 산정이 다 되었을 경우, 마지막으로 가장 적은 비용 산정이 된 것을 고르고 출력 import sys def solve(N, costs): # 각 집을 칠하는 비용의 최솟값을 저장할 dp 배열 생성 dp = [[0] * 3 for _.. 2024. 1. 31.
프로그래머스 Lv2 기능개발 (python) 기능개발 풀이 스택/큐 문제라고 되어있지만, 난 그와 다른 방법으로 풀었다. 왜냐하면 큐 방법일 듯하다는 생각은 들지만, 어떻게 해야 큐 방법으로 끝낼 수 있는지 감이 오지 않았기 때문이다. 그래서 다음처럼 계획하고 문제를 풀었다. 우선 개발을 모두 마쳤을 때 각 개발마다의 작업일수를 구하기 앞선 것이 완성되었을 때만, 후 순위 기능이 배포가 가능을 이용 2-1. 2중 for문을 이용해 현재 확인 하는 기능이 이미 배포가 되었으면, 다음 기능 확인. 2-2. 배포가 안된 기능이라면 다음 기능을 확인하면서, 이후 기능들이 같이 배포될 수 있는지 확인. 2-3. 이미 배포된 기능이면 또 다음 기능 확인. 2를 반복 후 answer에 입력된 값을 반환 을 사용했다. 다행히 문제가 해결되었다. # 뒤에 있는 기.. 2024. 1. 31.
SWEA D3 19113. 식료품 가게 (python) 식료품 가게 풀이 할인 가격과 할인 전 가격이 같이 있는 리스트에서 할인 가격만을 추출해 내야 하는 문제이다. 오름차순으로 정렬해서 제공해주지만, 내가 풀이하는 방식으로는 내림차순으로 정렬해서 풀어야 문제가 풀리기에 재정렬을 해주었다. 풀이 계획은 아래와 같다. 내림차순으로 재정렬 while문을 시행. 할인 가격 즉, 0.75를 곱한 가격이 리스트에 있으면, 해당 인덱스를 찾아내서 pop()을 시행 후 answer 리스트에 입력 0.75를 곱한 가격이 리스트에 없으면 그것이 할인 가격이므로 해당 인덱스를 pop(), answer 리스트에 입력. 2와 3의 과정이 모두 끝난 후 answer는 내림차순으로 정렬되어 있는 리스트이므로, 이를 오름차순으로 형식에 맞게 출력하기 위해 for문 및 print(end.. 2024. 1. 30.
SWEA D3 19185. 육십갑자 (python) 육십갑자 풀이 흔히 아는 10 간과 12지를 결합하는 방식과 관련한 코드를 짜는 문제이다. 육 십간 자는 60년마다 회갑이 있기에 이를 기반으로 최소공배수를 구하여서 풀었다. N, M 의 최소공배수 구하기 gapja라는 리스트를 만들고 그 안에 회갑까지 가능한 모든 수를 넣기. 이제 찾으려는 년도에 % 연산자를 이용해서 gapja [인덱스]에 넣어서 구현 # 유클리드 호제법을 이용한 최소공배수 구하기 # 최소공약수 def gcd(a, b): while b != 0: a, b = b, a % b return a # 최소공배수 def lcm(a, b): return a * b // gcd(a, b) T = int(input()) for testcase in range(1, T+1): N, M = map(in.. 2024. 1. 30.
프로그래머스 Lv2 프로세스(python) 프로세스 풀이 문제를 어떻게 해결할까 하다가 일단 큐로 풀어야 하는 방법이긴 하니까 큐의 방식을 이용해서 front와 rear를 설정해 주고 이를 이용해 줬다. 실행될 때, turn_number라는 변수를 이용해 내가 몇 번째 실행됐는지 기록한다. front와 rear를 비교했을 때, 남은 프로세스가 1개면, 그 프로세스를 실행시켜 준다. 1이 아니라면, 내 뒤에 나보다 우선순위가 높은 프로세스가 있는지 확인한다. 2-1. 만약 있으면, 나를 맨 뒤로 보내면서, front와 rear도 +1 하면서 한 칸 뒤로 무른다. 2-2. 만약 없다면, 내가 실행되야 하니, rear는 그대로 front만 +1 1과 2를 반복하면서 내가 찾으려는 인덱스인데 실행을 못하면 rear+1의 값으로 재설정해주고, 실행한다면 .. 2024. 1. 30.
프로그래머스 Lv2 구명보트 (python) 구명보트 풀이 보고나서 머리로는 어떻게 풀어야겠다 생각되었으나, 코드로 어떻게 해야할지 고민이 되었다. 우선 생각한대로 풀이는 1. 받은 인원을 무게 내림차순으로 정렬한다. 2. 보트를 타야하는데 남은 사람 중 가장 무거운 사람과 가장 가벼운 사람을 태운다. 2-1. 이 때 가장 무거운 사람+ 가벼운 사람 무게가 무게 제한에 걸리면 무거운 사람만 태운다. 3. 다시 2를 반복한다. 4. 2번을 반복한 횟수를 출력한다. 여기서 2번을 구현하려는데 for문을 안될 것 같고, while문을 이용해서 i와 j 인덱스 2개를 사용했다. 이렇게 가장 무거운 쪽에서 그리고 가장 가벼운 쪽에서 각각 진출할 수 있게 만들었다. # 무게 제한과 최대 2명 # 최대한 적게 사용해 모든 사람 구출 # 몇 번 사용했는지 반환 .. 2024. 1. 30.