전체 글
-
[백준] 6603 로또 with PythonPS 2022. 2. 10. 00:10
📌 BOJ 6603 로또 💡 조건 집합 S에서 K개의 숫자를 골라 뽑아 낼 수 있는 경우의 수를 모두 출력하는 문제 입력이 여러개 들어오며, 0이 들어왔을 때 종료 백트래킹, 재귀, 조합유형의 문제 🖥 소스 코드 from sys import stdin from itertools import combinations while 1: data = list(map(int, stdin.readline().split())) if len(data) == 1 and data[0] == 0: break else: a, arr = data[0], data[1:] res = [] for x in list(set(combinations(arr, 6))): if len(set(x)) == 6: temp = sorted(list..
-
[백준] 2535 아시아 정보올림피아드 with PythonPS 2022. 2. 8. 02:20
📌 BOJ 2535 아시아 정보올림피아드 💡 조건 대회참가 학생 수를 나타내는 N, 3 ≤ N ≤ 100. N개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사이에 두고 주어진다. 국가 번호는 1부터 순서대로 하나의 정수로 주어지며, 각 학생번호는 각 나라별로 1부터 순서대로 하나의 정수로 주어진다. 점수는 0 이상 1000 이하의 정수이고, 동점자는 없다고 가정한다. 정렬, 구현유형의 문제. 🖥 소스 코드 from sys import stdin n = int(stdin.readline()) grade = [] for i in range(n): a,b,c = map(int, stdin.readline().split()) grade.append((c, a, b)..
-
[백준] 1940 주몽 with PythonPS 2022. 2. 7. 22:35
📌 BOJ 1940 주몽 💡 조건 갑옷은 두 개의 재료로 만드는데 두 재료의 고유한 번호를 합쳐서 M(1 ≤ M ≤ 10,000,000)이 되면 갑옷이 만들어 지게 된다. N(1 ≤ N ≤ 15,000) 개의 재료와 M이 주어졌을 때 몇 개의 갑옷을 만들 수 있는지를 구하는 문제 정렬, 투 포인터 유형의 문제 🖥 소스 코드 from sys import stdin from bisect import bisect_left n = int(stdin.readline()) m = int(stdin.readline()) arr = sorted(list(map(int, stdin.readline().split()))) res = 0 visited = set() arr.sort() for i in arr: f = bis..
-
[백준] 1292 쉽게 푸는 문제 with PythonPS 2022. 2. 3. 20:07
📌 BOJ 1292 쉽게 푸는 문제 💡 조건 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 문제 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. 다이나믹 프로그래밍, 수학, 구현유형의 문제 🖥 소스 코드 from sys import stdin n, m = map(int, stdin.readline().split()) arr = [0, 1] for i in range(2, m + 1): for j in range(i): arr.append(arr[-1] + i) print(arr[m] - arr[n - 1])🔖 ..
-
[백준] 16234 인구 이동 with PythonPS 2022. 2. 3. 19:45
📌 BOJ 16234 인구 이동 💡 조건 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. N, L, R이 주어진다. (1 ≤ N ≤ 50, 1 ≤ L ≤ R ≤ 100) 인구 이동은 하루 동안 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루 동안 연다. 위의 조건에 의해 열어야하는 국경선이 모두 열렸다면, 인구 이동을 시작한다. 국경선이 열려있어 인접한 칸만을 이용해 이동할 수 있으면, 그 나라를 오늘 하루 동안은 연합이라고 한다. 연합을 이루고 있는 각 칸의 인구수는 (연합의 인구수) / (연합을 이루고 있는 칸의 개수)가 된다. 연합을 해체..
-
[백준] 15658 연산자 끼워넣기 (2) with PythonPS 2022. 2. 2. 17:56
📌 BOJ 15658 연산자 끼워넣기 (2) 💡 조건 N개의 수로 이루어진 수열 A1, A2, ..., AN N(2 ≤ N ≤ 11), (1 ≤ Ai ≤ 100) 입력 값중 셋째 줄에 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 식의 계산은 연산자 우선 순위를 무시하고 앞에서부터 진행해야 한다. 나눗셈은 정수 나눗셈으로 몫만 취한다. 또한 음수를 나눌 때에는 양수로 바꾼 뒤 몫을 취하고, 그 몫을 음수로 바꾸어야 한다. 백트래킹, DFS 알고리즘 유형의 문제 🖥 소스 코드 from sys impo..
-
[백준] 14500 테트로미노 with PythonPS 2022. 2. 2. 17:34
📌 BOJ 14500 테트로미노 💡 조건 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 해야한다. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도록 놓아야 하며, 회전이나 대칭을 시켜도 된다. 종이의 세로 크기 N과 가로 크기 M이 주어진다. (4 ≤ N, M ≤ 500) N개의 줄에 종이에 쓰여 있는 수가 주어진다. i번째 줄의 j번째 수는 위에서부터 i번째 칸, 왼쪽에서부터 j번째 칸에 쓰여 있는 수이다. 입력으로 주어지는 수는 1,000을 넘지 않는 자연수이다. S의 문제 🖥 소스 코드 from sys..
-
[백준] 9933 민균이의 비밀번호 with PythonPS 2022. 2. 2. 01:06
📌 BOJ 9933 민균이의 비밀번호 💡 조건 민균이의 비밀번호가 "tulipan"인 경우에 목록에는 "napilut"도 존재해야 한다. 민균이의 파일에 적혀있는 단어가 모두 주어졌을 때, 비밀번호의 길이와 가운데 글자를 출력하는 프로그램을 작성하라. 단어의 수 N (2 ≤ N ≤ 100)이 주어진다. 단어는 알파벳 소문자로만 이루어져 있으며, 길이는 2보다 크고 14보다 작은 홀수이다. 구현, 문자열 유형의 문제 🖥 소스 코드 from sys import stdin n = int(stdin.readline()) data = [] for _ in range(n): data.append(list(stdin.readline().rstrip())) def solve(): for i in range(n): te..
-
[백준] 1904 01타일 with PythonPS 2022. 2. 2. 00:43
📌 BOJ 1904 01타일 💡 조건 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다. N=1일 때 1만 만들 수 있고, N=2일 때는 00, 11을 만들 수 있다. (01, 10은 만들 수 없게 되었다.) 또한 N=4일 때는 0011, 0000, 1001, 1100, 1111 등 총 5개의 2진 수열을 만들 수 있다. N이 주어진다. (1 ≤ N ≤ 1,000,000) 지원이가 만들 수 있는 길이가 N인 모든 2진 수열의 개수를 15746으로 나눈 나머지를 출력한다. DP ..
-
[백준] 1094 막대기 with PythonPS 2022. 2. 1. 02:14
📌 BOJ 1094 막대기 💡 조건 64cm인 막대를 가지고 있다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대를 만들려고 한다. 아래는 막대를 자르는 방법이다. 1) 지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다. 1-1) 가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다. 1-2) 만약, 위에서 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 X보다 크거나 같다면, 위에서 자른 막대의 절반 중 하나를 버린다.2) 이제, 남아있는 모든 막대를 풀로 붙여서 Xcm를 만든다. X는 64보다 작거나 같은 자연수 DFS, 수학,..