본문 바로가기

Programming456

[C/C++] 백준 #2096 내려가기(동적 계획법) 내려가기 문제는 간단한 형태의 동적 계획법(Dynamic Programming)을 사용하면 됩니다. 동적 계획법을 사용하지 않고, DFS나 BFS를 이용해서 풀 수는 있지만, 그렇게 하면 시간이 많이 걸립니다. 다익스트라 알고리즘을 사용해도 동적 계획법을 적용한 것과 같은 효과를 낼 수 있습니다. https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 처음에는 설명을 이해하기 어려웠습니다. 주어진 N이 주어지면, 3xN 형태의 공간이 발생합니다. 맨 위층에서는 3칸.. 2023. 3. 30.
[C/C++] 백준 #2089 -2진수(수학) 이번 문제는 실제 사용할 일은 거의 없는 -2 진법 이야기입니다. 간혹 수학에서는 마이너스 진법이나 복소수 진법과 관련되어 이야기 되기는 합니다. 대표적으로 \(1+i\)진법 같은 경우가 있습니다. https://www.acmicpc.net/problem/2089 2089번: -2진수 -2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110 www.acmicpc.net 문제 자체는 오답을 낼 가능성이 있는 것을 제외하고는 크게 어렵지는 않습니다. 일반적으로 양수 진법이라.. 2023. 3. 28.
[C/C++] 백준 #2086 피보나치 수의 합(분할정복) 이번 문제는 피보나치 수열들의 합을 계산하는 것입니다. 언뜻, 피보나치 수열을 구해서 그 합을 구해야 할 것으로 생각할 수 있습니다. 수학식을 유도하는 것이 어려워서인지, 문제의 난이도는 Gold I 단계입니다. https://www.acmicpc.net/problem/2086 2086번: 피보나치 수의 합 제 1항과 제 2항을 1이라 하고, 제 3항부터는 앞의 두 항의 합을 취하는 수열을 피보나치(fibonacci) 수열이라고 한다. 예를 들어 제 3항은 2이며, 제 4항은 3이다. 피보나치 수열의 a번째 항부터 b번째 www.acmicpc.net 조금 생각해보면, 이 수열도 피보나치 수열과 다르지 않다는 것을 알 수 있습니다. 수학적으로 점화식을 이용해서 풀이를 하는 것이라서, 다소 생소할 수가 있습.. 2023. 3. 28.
[C/C++] 백준 #2075 N번째 큰 수(n'th element) N번째 큰 수를 찾으라는 이 문제는 특이한 조건을 가진 \(N \times N\) 2차원 공간에 들어가 있는 숫자 중 뒤에서 N번째 큰 수를 찾아서 출력하라는 것입니다. https://www.acmicpc.net/problem/2075 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 처음 이 문제를 봤을 때, 저 조건을 잘 이용하면 되지 않을까라는 생각을 하고 고민을 했습니다. 하지만 결론은 문제에서 제시하는 조건은 쓸모가 없다는 것입니다. N개의 정렬된 상태의 배열이 있으니 합병을 생각할 수도 있지만, 결국 \(O.. 2023. 3. 25.
[C/C++] 백준 #2056 작업(위상정렬) https://www.acmicpc.net/problem/2056 2056번: 작업 수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 www.acmicpc.net 이번 문제는 선행작업과 후행작업이 있을 때, 전체 작업시간이 얼마나 걸릴 것인지 판단하는 것입니다. 소프트웨어 공학에서 자주 발생하는 일입니다. 소프트웨어 공학에서도 선행작업과 후행작업이 있는 경우 작업 인력을 무한정 투입할 경우 마칠 수 있는 최소 시간을 구하게 됩니다. 이와 같이 작업의 선후가 있는 경우에 위상정렬을 사용하게 됩니다. 위상절렬은 작업의 선후에 따라서 정렬을 하는 것이지.. 2023. 3. 23.
[Python] 프로그래머스 - 디스크 컨트롤러(탐욕기법) 프로그래머스 코딩 테스트는 안 하다가, 지식인을 통해서 답변을 하면서 하게 되었네요. https://school.programmers.co.kr/learn/courses/30/lessons/42627 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제에서 핵심은 작업을 관리하는 것을 어떻게 시뮬레이션할 것인가입니다. 현재 태스크에 있는 작업들은 모두 대기상태에서 어떤 것을 먼저 실행하는 것이 좋을까입니다. 태스크에 있는 작업이 한개뿐이라면 전혀 문제가 없겠죠. 하지만 여러개라면, 우선순위를 정해야 합니다. K개의 작업이 있다면, 먼저 수행하는 작업에 .. 2023. 3. 23.