백준
-
[백준] 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, 수학,..
-
[백준] 1058 친구 with PythonPS 2022. 2. 1. 01:48
📌 BOJ 1058 친구 💡 조건 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오. A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다. 사람의 수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 각 사람이 친구이면 Y, 아니면 N이 주어진다. 가장 유명한 사람의 2-친구의 수를 출력한다. 플로이드-와샬 알고리즘 유형의 문제 🖥 소스 코드 from sys import stdin n = int(stdin.readline()) arr = [] for ..
-
[백준] 1026 보물 with PythonPS 2022. 1. 31. 00:30
📌 BOJ 1026 보물 💡 조건 길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자. S = A[0] × B[0] + ... + A[N-1] × B[N-1] S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다. 정렬, 사칙연산 유형의 문제 🖥 소스 코드 from sys import stdin n = int(stdin.readline()) a = sorted(list(map(int, stdin.readline().split()))) b = sorted(list(map(int, stdin.readline().split())), reve..
-
[백준] 1021 회전하는 큐 with PythonPS 2022. 1. 31. 00:21
📌 BOJ 1021 회전하는 큐 💡 조건 N개의 원소를 포함하고 있는 양방향 순환 큐 1
-
-
[백준] 14916 거스름돈 with PythonPS 2022. 1. 26. 22:44
📌 BOJ 14916 거스름돈 💡 조건 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈 액수 n(1 ≤ n ≤ 100,000) DP, 수학 유형의 문제 🖥 소스 코드 from sys import stdin n = int(stdin.readline()) res = int(1e9) for i in range(n // 5, -1, -1): money = n - i * 5 cnt = i if money % 2 != 0: continue else: cnt += money // 2 res = min(cnt, res) print(res) if res != int(1e9) else print(-1)🔖 예제 및 실행결과 예제 13실행결과 5⌨️ 문제 풀이 5원 동전이 몇 개 일때 최소인지 구하면 된다. int..