[Python] 구명보트
·
Coding-Test/프로그래머스
💻 문제 정의무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다.예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다.구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다.💡 접근 및 설계두 포인터로 접근하였다. 몸무게가 가장 많이 나가는 사람과 가장 적게 나가는 사람을 함께 태우고, 보트가 버티는 무게라면 보낸다. 만약 아니라면 몸무게가 가장 많이 나가는 사람 혼자 태워서 보낸다...
[Python] 조이스틱
·
Coding-Test/프로그래머스
보호되어 있는 글입니다.
[Python] 2342 Dance Dance Revolution
·
Coding-Test/백준
💻 문제 정의다음 모양의 DDR이 있다.처음에 게이머는 두 발을 중앙에 모으고 있다.(그림에서 0의 위치) 그리고 게임이 시작하면, 지시에 따라 왼쪽 또는 오른쪽 발을 움직인다. 하지만 그의 두 발이 동시에 움직이지는 않는다.이 게임에는 이상한 규칙이 더 있다. 두 발이 같은 지점에 있는 것이 허락되지 않는 것이다. (물론 게임 시작시에는 예외이다) 만약, 한 발이 1의 위치에 있고, 다른 한 발이 3의 위치에 있을 때, 3을 연속으로 눌러야 한다면, 3의 위치에 있는 발로 반복해야 눌러야 한다는 것이다.중앙에 있던 발이 다른 지점으로 움직일 때, 2의 힘을 사용하게 된다. 그리고 다른 지점에서 인접한 지점으로 움직일 때는 3의 힘을 사용하게 된다. (예를 들면 왼쪽에서 위나 아래로 이동할 때의 이야기..
[Python] 11049 행렬 곱셈 순서
·
Coding-Test/백준
💻 문제 정의크기가 N×M인 행렬 A와 M×K인 B를 곱할 때 필요한 곱셈 연산의 수는 총 N×M×K번이다. 행렬 N개를 곱하는데 필요한 곱셈 연산의 수는 행렬을 곱하는 순서에 따라 달라지게 된다.예를 들어, A의 크기가 5×3이고, B의 크기가 3×2, C의 크기가 2×6인 경우에 행렬의 곱 ABC를 구하는 경우를 생각해보자.AB를 먼저 곱하고 C를 곱하는 경우 (AB)C에 필요한 곱셈 연산의 수는 5×3×2 + 5×2×6 = 30 + 60 = 90번이다.BC를 먼저 곱하고 A를 곱하는 경우 A(BC)에 필요한 곱셈 연산의 수는 3×2×6 + 5×3×6 = 36 + 90 = 126번이다.같은 곱셈이지만, 곱셈을 하는 순서에 따라서 곱셈 연산의 수가 달라진다.행렬 N개의 크기가 주어졌을 때, 모든 행렬..
[Python] 16947 서울 지하철 2호선
·
Coding-Test/백준
💻 문제 정의다음 지하철 2호선과 같은 형태의 그래프가 주어졌을 때, 각 구간과 순환 구간 사이의 거리를 구하는 문제이다. 💡 접근 및 설계그래프에서 사이클이 발생하는 구간을 구하고 해당 구간에 포함된 노드들의 거리는 0이 된다. 이후 사이클이 아닌 노드에 대해서 사이클이 포함된 노드까지의 거리를 구하면 된다.문제에서 노드의 개수 N개, 그리고 간선의 수도 N개이다. 따라서 해당 그래프에는 반드시 하나의 사이클이 존재한다. DFS로 탐색 시작 노드와 현재 방문 노드를 비교하며 같다면, 사이클이 발생한다고 할 수 있다. 이후 사이클이 발생하지 않는 노드에 대해서 BFS를 이용하여 거리를 구할 수 있을것이다.✏️ 알고리즘 풀이cycle = [False] * (N+1)def dfs(node, start, ..
[Python] 2613 숫자구슬
·
Coding-Test/백준
💻 문제 정의그림과 같이 구슬을 그룹지어서 숫자의 합의 최댓값을 구할 때, 여러가지 경우에서 최댓값이 최소가 되는 경우는 17이다.각 그룹의 합 중 최댓값이 최소가 되도록 M개의 그룹으로 나누었을 때, 그 최댓값과 각 그룹을 구성하는 구슬의 개수를 찾아 출력하는 프로그램을 작성하시오.🗒️ 최종 제출 코드# 2613 숫자구슬# "각 그룹 합이 mid 이하가 되도록 M개 이하 그룹으로 나눌 수 있는지" 확인def check(mid): count = 1 # 현재 그룹의 갯수 s = 0 # 현재 그룹의 합 for num in numbers: # 현재 그룹에 num을 더하면 mid값 초과 -> 그룹 수 증가 if s + num > mid: count..