2024/09 10

[Algorithm] BAEKJOON 16953번: A → B (Python)

https://www.acmicpc.net/problem/16953    문제정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.2를 곱한다.1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자. 입력첫째 줄에 A, B (1 ≤ A  출력A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.     풀이그리디 알고리즘을 사용해서 B에서 A로 변환하는 과정에서 각 단계에서 가능한 두 가지 연산 중 최적의 연산을 선택하여 해결하였다.  Python 소스 코드def min_operations(A, B): operations = 0 while B > A: if B % 10 == 1..

Algorithm/BAEKJOON 2024.09.15

[Algorithm] BAEKJOON 11000번: 강의실 배정 (C++)

https://www.acmicpc.net/problem/11000    문제수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다. 김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다. 참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)수강신청 대충한 게 찔리면, 선생님을 도와드리자! 입력첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si  출력강의실의 개수를 출력하라.     풀이그리디 알고리즘과 우선순위 큐를 활용해서 가장 빨리 끝나는 수업을 효율적으로 추적하여 해결하..

Algorithm/BAEKJOON 2024.09.15

[Algorithm] BAEKJOON 1946번: 신입 사원 (C++)

https://www.acmicpc.net/problem/1946   문제언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다.그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다.이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용에서 선발할 수 있는 신입..

Algorithm/BAEKJOON 2024.09.14

[Algorithm] BAEKJOON 1789번: 수들의 합 (C++)

https://www.acmicpc.net/problem/1789    문제서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까? 입력첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. 출력첫째 줄에 자연수 N의 최댓값을 출력한다.     풀이그리디 알고리즘을 사용하여 해결하였다. 최대한 많은 수의 자연수를 포함시키는 것이 목표이므로 가장 작은 수부터 순서대로 더하는 것이 가장 효과적인 전략이다.  C++ 소스 코드#include using namespace std;int main() { unsigned long long S; cin >> S; unsigned long long sum = 0; int N = 0; fo..

Algorithm/BAEKJOON 2024.09.14

[Algorithm] BAEKJOON 2217번: 로프 (Python)

https://www.acmicpc.net/problem/2217   문제N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 입력첫째 줄..

Algorithm/BAEKJOON 2024.09.14

[Algorithm] BAEKJOON 1541번: 잃어버린 괄호 (Python)

https://www.acmicpc.net/problem/1541    문제세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다. 출력첫째 줄에 정답을 출력한다.     풀이수식을 마이너스 기호 기준으..

Algorithm/BAEKJOON 2024.09.14

[Algorithm] BAEKJOON 1485번: 정사각형 (C++)

https://www.acmicpc.net/problem/1485    문제네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오. 입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같은 정수이다. 같은 점이 두 번 이상 주어지지 않는다. 출력각 테스트 케이스마다 입력으로 주어진 네 점을 이용해서 정사각형을 만들 수 있으면 1을, 없으면 0을 출력한다.     풀이네 점이 정사각형을 형성하기 위해서는 모든 변의 길이가 같아야 하고, 대각선의 길이가 같아야 한다는 점을 이용하여 해결하였다.  C++ 소..

Algorithm/BAEKJOON 2024.09.11

[Algorithm] BAEKJOON 1463번: 1로 만들기 (C++)

https://www.acmicpc.net/problem/1463   문제정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.     풀이다이나믹 프로그래밍 기법을 활용해 최소 연산 횟수를 저장하는 배열인 dp 배열을 사용하여 해결하였다.  C++ 소스 코드#include #include using namespace std;int main(..

Algorithm/BAEKJOON 2024.09.06

[Algorithm] BAEKJOON 1927번: 최소 힙 (Python)

https://www.acmicpc.net/problem/1927    문제널리 잘 알려진 자료구조 중 최소 힙이 있다. 최소 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오.배열에 자연수 x를 넣는다.배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다.프로그램은 처음에 비어있는 배열에서 시작하게 된다. 입력첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. x는 231보다 작은 자연수 또는 0이고, 음의 정수는 입력으로 주어지지 않는다. ..

Algorithm/BAEKJOON 2024.09.03

[Algorithm] BAEKJOON 1003번: 피보나치 함수 (C++)

https://www.acmicpc.net/problem/1003   문제다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); }}fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.fibonacci(2)는 fibonacci(1) (두 번째..

Algorithm/BAEKJOON 2024.09.02