Python 8

[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 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 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 14241번: 슬라임 합치기 (Python)

https://www.acmicpc.net/problem/14241   문제영선이와 효빈이는 슬라임을 합치는 게임을 하고 있다. 두 사람은 두 슬라임을 골라서 하나로 합쳐야 한다. 게임은 슬라임이 하나 남았을 때 끝난다.모든 슬라임은 양수 크기를 가지고 있다. 두 슬라임 x와 y를 합쳤을 때, 합친 슬라임의 크기는 x+y가 된다. 또한, 슬라임을 합칠 때 마다 두 사람은 x*y 점수를 얻게 된다.영선이와 효빈이가 얻을 수 있는 점수의 최댓값을 구하는 프로그램을 작성하시오. 입력첫째 줄에 슬라임의 개수 N (2 ≤ N ≤ 100)이 주어진다.둘째 줄에는 슬라임의 크기가 주어진다. 크기는 100보다 작거나 같은 자연수이다. 출력첫째 줄에 영선이와 효빈이가 얻을 수 있는 점수의 최댓값을 출력한다.     풀이..

Algorithm/BAEKJOON 2024.08.23

[Algorithm] BAEKJOON 21919번: 소수 최소 공배수 (Python)

https://www.acmicpc.net/problem/21919  문제행복이는 길이가 N인 수열 A에서 소수들을 골라 최소공배수를 구해보려고 한다.행복이를 도와 이를 계산해주자. 입력첫째 줄에 수열 A의 길이 N이 주어진다. (1≤N≤10,000)그 다음줄에는 수열 A의 원소 Ai가 공백으로 구분되어 주어진다. (2≤Ai≤1,000,000)답이 2의 63승 미만인 입력만 주어진다. 출력첫째 줄에 소수들의 최소공배수를 출력한다.만약 소수가 없는 경우는 -1을 출력한다.    풀이수열 A의 모든 원소에 대해 소수 판정을 먼저 해준 다음 파이썬의 math 라이브러리에 있는 최소 공배수 함수인 lcm 함수를 활용하여 해결하였다.  Python 소스 코드import mathN = int(input())A = ..

Algorithm/BAEKJOON 2024.08.17

[Algorithm] BAEKJOON 21921번: 블로그 (Python)

https://www.acmicpc.net/problem/21921 문제찬솔이는 블로그를 시작한 지 벌써 N일이 지났다.요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다.찬솔이는 X일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.찬솔이를 대신해서 X일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자. 입력첫째 줄에 블로그를 시작하고 지난 일수 N와 X가 공백으로 구분되어 주어진다.둘째 줄에는 블로그 시작 1일차부터 N일차까지 하루 방문자 수가 공백으로 구분되어 주어진다. 출력첫째 줄에 X일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에..

Algorithm/BAEKJOON 2024.08.16

[Algorithm] BAEKJOON 1312번: 소수 (Python)

https://www.acmicpc.net/problem/1312  문제피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다. 입력첫 번째 줄에 A와 B(1 ≤ A, B ≤ 100,000), N(1 ≤ N ≤ 1,000,000)이 공백을 경계로 주어진다. 출력A÷B를 했을 때, 소숫점 아래 N번째 수를 출력한다.    풀이처음에는 소수점 관련 함수를 이용하여 풀어야 하나 생각했는데 주어진 N 조건의 범위가 매우 큰 것을 보고 수학적 원리를 이용해야 한다는 것을 알았다.단순히 어렸을 때 배웠던 나눗셈의 원리, 즉 나머지에 10을 곱하고 다시 나누는 것을 반복하..

Algorithm/BAEKJOON 2024.08.16