algorhythm
-
[Algo Rhythm🕺💃] BOJ 1463 - 1로 만들기Algo Rhythm🕺💃/BOJ 2021. 7. 22. 00:00
💫문제 분석 주어진 n (1≤n≤106)에 대하여 사용가능한 연산들은 다음과 같다. op_1 : n \equiv 0 \pmod{3}이면,\ n = n \div 3 op_2 : n \equiv 0 \pmod{2}이면,\ n = n \div 2 op_3 : n = n - 1 그리고 n을 1로 만들기 위해 사용하는 연산의 최소 횟수를 f(n)이라고 하자. n에 대하여 op_1,\ op_2,\ op_3을 모두 사용할 수 있을 때 n을 1로 만들기 위해 사용하는 연산의 최소 횟수를 각각 f_1,\ f_2,\ f_3라고 하자. 그렇다면 n \equiv 0 \pmod{3}이면 op_1을 사용하여 n을 n \div 3으로 줄일 수 있기 때문에 $f_1..
-
[Algo Rhythm🕺💃] BOJ 10971 - 외판원 순회 2Algo Rhythm🕺💃/BOJ 2021. 7. 10. 01:22
💫문제 분석 도시들의 수를 n, 각 도시를 C_i\ (1 \le i \le n), 그리고 C_a에서 C_b로 이동하는데 드는 비용을 W_{a, b}라고 하자. 이때 W_{a, b} \ne W_{b, a}일 수도 있고 W_{a,b} = 0 이면 C_a에서 C_b로 이동할 수 없다. 우리는 외판원이 한 번 갔던 도시를 재방문하지 않을 때 어느 한 도시에서 출발해 n개의 도시를 모두 거쳐 다시 원래의 도시로 돌아올 때 드는 최소 비용을 구해야 한다. 이때 주의할 점이 외판원이 어느 도시에서 출발하는가는 중요하지 않다는 것이다. 왜냐하면 아래 그림과 같이 최소 비용으로 이동가능한 경로는 '원순열'의 형태를 띄기 때문이다. 따라서 이 문제는 최소 비용을 가진 원순열을 찾는 문제..
-
[Algo Rhythm🕺💃] BOJ 18290 - NM과 K(1)Algo Rhythm🕺💃/BOJ 2021. 6. 30. 17:41
💫문제 분석 크기가 n \times m\ (1 \le n,\ m \le 10)인 격자판을 g라고 하자. g의 각 칸에는 정수가 하나씩 들어있는데 인접한 칸들을 제외하고 k\ (1 \le k \le \min (4, n \times m))개의 칸을 선택하여 각 칸에 들어있는 모든 수들을 더할 때 나올 수 있는 값들 중 최댓값을 구해야 한다. g의 각 칸을 하나의 vertex라고 생각해보자. 그렇다면 이 문제는 n \times m개의 vertex들 중에서 인접한 칸들을 제외하고 k개의 vertex를 선택할 때 얻을 수 있는 최댓값을 구하는 backtracking 문제로 이해할 수 있다. 🔥문제 풀이 n \times m개의 칸 중 k개의 칸을 선택할 때 한 가지 조건은 이미 선택..
-
[Algo Rhythm🕺💃] BOJ 9095 - 1, 2, 3 더하기Algo Rhythm🕺💃/BOJ 2021. 6. 29. 00:06
💫문제 분석 테스트 케이스의 개수를 t, 각 테스트 케이스마다 주어지는 정수를 n (1 \le n \lt 11)이라고 하자. 그리고 n을 1,\ 2, \ 3의 합으로 나타내는 방법의 수를 f(n)이라고 하자. 각 테스트케이스마다 f(n)을 출력해야 하며, 합을 나타낼 때는 수를 1개 이상 사용해야 한다. f(n)은 1부터 차례대로 아래와 같다. 이때 파란색 동그라미로 표시된 수들을 관찰하면 분명히 연쇄적인 관계가 있다는 것을 알 수 있다. 따라서 이 문제는 그 '연쇄적인 관계'를 이용하여 해결할 수 있다. 🔥문제 풀이 앞서 언급한 연쇄적인 관계는 다음과 같다. $\begin{matrix} f(i) &=& \sum_{j = 1}^3 g(i, j) & (1\le i\lt 11, i ..
-
[Algo Rhythm🕺💃]BOJ 14501 - 퇴사Algo Rhythm🕺💃/BOJ 2021. 3. 11. 00:41
문제분석 백준이는 i (1 \le i \le N)번째 날의 일을 하느냐 마느냐에 따라 얻을 수 있는 이익이 다르다. 단순히 생각하면 i번째 날의 일을 하는 경우와 안 하는 경우로 나눠서 모든 경우를 살핀 뒤 그 중 최대의 이익을 구하면 될 것 같다. 사실 그래도 된다. 하지만 조금 더 생각해보면 보다 더 효율적인 방법이 있다는 것을 알 수 있다. 앞서 말했듯이 백준이는 i번째 날의 일을 하느냐 마느냐에 따라 얻을 수 있는 이익이 다르다. 자세히 말하면 만약 i번째 날의 일을 한다면 i + T[i]번째 날의 일부터 하느냐 마느냐를 선택할 수 있고 만약 i번째 날의 일을 하지 않는다면 i + 1번째 날의 일부터 하느냐 마느냐를 선택할 수 있다. 즉, 백준이가 i번째 날의 일을 하느냐 마느냐를 결정..
-
[Algo Rhythm🕺💃]BOJ 13458 - 시험감독Algo Rhythm🕺💃/BOJ 2021. 3. 9. 16:53
문제 분석 시험장의 개수를 N(1 ≤ N ≤ 1,000,000), i번째 시험장에 있는 응시자의 수를 Ai(1 ≤ Ai ≤ 1,000,000) , 총감독관과 부감독관이 한 시험장에서 감시할 수 있는 응시자의 수를 각각 B, C(1 ≤ B, C ≤ 1,000,000)라고 하자. 그리고 i번째 시험장에 들어가야 하는 총감독관과 부감독관의 수를 각각 n\_main_i, n\_sub_i라고 하자. 총감독관은 각 시험장에 무조건 한 명 들어가야 하고 부감독관은 없거나 여러 명 있어도 된다. 따라서 i번째 시험장에서 필요한 감독관 수의 최솟값은 아래 부등식을 만족하는 가장 작은 n\_sub_i를 구하는 것과 같다. B\ +\ C \times n\_sub_i\ \ge A_i 이를 통해 우리가 최종적으로..
-
[Algo Rhythm🕺💃] LeetCode 784. Letter Case PermutationAlgo Rhythm🕺💃/LeetCode 2020. 7. 27. 15:12
📚 Problem description Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create. Examples: Input: S = "a1b2" Output: ["a1b2", "a1B2", "A1b2", "A1B2"] Input: S = "3z4" Output: ["3z4", "3Z4"] Input: S = "12345" Output: ["12345"] Note: S will be a string with length between 1 and 12. S wi..