본문 바로가기
728x90

Programming/Python46

[Solved] BOJ: 2467 | 용액 문제합이 0에 가장 가까운 두 용액 조합 구하기입력과 출력입력첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 서로 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.출력첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액의 특성값을 출력한다. 출력해야 하는 두 용액은 특성값의 오름차순으로 출력한다. 특성값이 0에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.문제 .. 2022. 11. 20.
[Solved] BOJ: 1389 | 케빈 베이컨의 6단계 법칙 문제케빈의 베이컨 게임은 임의의 두 사람이 최소 몇 단계 만에 이어질 수 있는지 계산하는 게임한 사람이 나머지 모든 사람들에 대해 베이컨 게임을 진행해서 나오는 단계들의 총합을 베이컨 수라고 한다.모든 사람들의 베이컨 수를 구해 그 중 최소의 베이컨 수를 갖는 사람을 구하자.입력과 출력입력첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻이다. A와 B가 친구이면, B와 A도 친구이며, A와 B가 같은 경우는 없다. 친구 관계는 중복되어 들어올 수도 있으며, 친구가 한 명도 없는 사람은 없다. 또, 모든 사람은 친구 관계로 연결되어.. 2022. 11. 15.
[Solved] BOJ: 2805 | 나무 자르기 문제여러 높이의 나무들이 주어지고같은 높이로 이 나무들을 잘라서 최소 M미터 이상의 나무를 확보하고자 한다.입력과 출력입력첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보다 크거나 같기 때문에, 상근이는 집에 필요한 나무를 항상 가져갈 수 있다. 높이는 1,000,000,000보다 작거나 같은 양의 정수 또는 0이다.출력적어도 M미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값을 출력한다.문제 해결 요약적절한 절단 높이를 탐색하면서 최소 M미터 이상의 나무를 확보해야한다.시간 복잡도를 줄이기 위해 이진.. 2022. 11. 15.
[Solved] BOJ: 4949 | 균형잡힌 세상 문제주어진 문자열에서 중괄호와 대괄호가 짝을 이뤄야 함.입력과 출력입력하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다.입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.출력각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.문제 해결 요약문자열에서 왼쪽 괄호 등장하면 스택에 오른쪽 괄호 추가문자열에서 오른쪽 괄호 등장하면 스택에서 pop한거와 비교해서 같다면 균형O 아니라면 균형X코드 설명import 및 입력받기-from collections import dequeimport sysinput = .. 2022. 11. 11.
[Solved] BOJ: 1759 | 암호 만들기 문제모음 최소 1개 이상, 자음 최소 2개 이상으로 총 l개의 단어 조합을 사전식으로 배열함입력과 출력입력첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.출력각 줄에 하나씩, 사전식으로 가능성 있는 암호를 모두 출력한다.문제 해결 요약입력 받은 단어들에서 자모음을 분리해 각각 자음리스트 모음리스트로 추가모음조합과 자음조합으로 단어 생성사전순 배열 및 출력코드 설명import 및 입력받기-from itertools import combinationsimport sysinput = sys.stdin.readlinel, c = map(int, input().split())l.. 2022. 11. 11.
[Solved] BOJ: 14889 | 스타트와 링크 문제N(짝수) 명의 사람들을 스타트, 링크 팀으로 나누어 배정팀에 i와 j가 소속되면 팀에 더해지는 능력치는 Sij + Sji각각의 능력치들을 합하면 팀의 능력치스타트 팀과 링크 팀의 능력치 차가 최소가 되도록 사람들을 분배하자.입력과 출력입력첫째 줄에 N(4 ≤ N ≤ 20, N은 짝수)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100보다 작거나 같은 정수이다.출력첫째 줄에 스타트 팀과 링크 팀의 능력치의 차이의 최솟값을 출력한다.문제 해결 요약코드 설명import 및 입력받기-from itertools import combinationsimport sys.. 2022. 11. 11.
728x90