Tiny Star
[백준/Python] 1713 후보 추천하기
·
🧠 Problem Solving(PS)
📌문제 탐색하기월드초 학생회장 후보는 일정 기간 동안 전체 학생의 추천에 의해 정해진 수만큼 선정홈페이지에 추천받은 학생의 사진을 게시할 수 있는 사진틀을 후보 수만큼 만듦추천 학생을 사진틀에 게시하고 추천 횟수를 표시하는 규칙추천을 시작하기 전 모든 사진틀은 비어있음특정 학생을 추천하면, 추천받은 학생의 사진이 사진틀에 게시비어있는 사진틀이 없다면, 추천받은 횟수가 가장 적은 학생 사진을 삭제하고 새롭게 추천받은 학생 사진 게시추천 받은 횟수가 가장 적은 학생이 두 명 이상인 경우, 그 중 가장 오래된 사진 삭제이미 게시된 학생이 추천받으면 추천 횟수만 증가게시된 사진이 삭제되면 해당 학생의 추천 횟수는 0으로 초기화사진틀의 개수 N(1 ≤ N ≤ 20)과 전체 학생의 추천 결과(총 추천 횟수 1,0..
[백준/Python] 10157 자리배정
·
🧠 Problem Solving(PS)
📌문제 탐색하기공연장에 가로로 C개, 세로로 R개의 좌석이 CxR 격자형으로 배치 (5 ≤ C, R ≤ 1,000)각 좌석의 번호는 해당 격자의 좌표로 표시 가장 왼쪽 아래의 좌석번호는 (1,1), 가장 오른쪽 위 좌석번호는 (x,y)공연장 입장을 위해 대기 중인 사람들은 1, 2, 3, 4, ... 순으로 대기번호표를 받음대기번호 1인 사람을 (1,1)에 배정하고, 시계방향으로 돌아가며 비어있는 좌석에 관객을 순서대로 배정대기 순서가 K(1 ≤ K ≤ 100,000,000)인 관객에게 배정될 좌석 번호 (x, y)를 찾는 프로그램 작성하기해당 대기번호의 관객에게 좌석을 배정할 수 없는 경우 0 출력공연장의 최대 넓이는 1000x1000이므로, 최대 넓이인 경우 모든 좌석에 대한 배치를 하나하나 탐색해..
[백준/Python] 18320 2xN 예쁜 타일링
·
🧠 Problem Solving(PS)
📌문제 탐색하기타일링을 해야하는 바닥은 2xN의 격자 (1 ≤ N ≤ 2,000)각각 예쁨의 정도가 있는 2x1 크기 타일 A개, 2x2 크기 타일 B개가 있음 (1 ≤ A, B ≤ 2,000)타일들을 사용해 바닥의 예쁨이 최대가 되도록 할 때, 예쁨의 최댓값 구하기타일은 90도 회전 가능이 문제는 바닥을 채울 각 타일을 고를 때 마다 항상 예쁨이 최대가 될 수 있도록 선택을 하는 것이 핵심이다.만약 현재 남은 공간에 2x2 타일을 붙일 수 있다면, 남아있는 타일 중 가장 예쁜 2x1 타일 두개의 예쁨 합과 가장 예쁜 2x2 타일 한 개의 예쁨 값을 비교해서 더 큰 쪽을 붙인다. 만약 남은 공간에 2x2 크기의 타일을 붙일 수 없다면, 2x1 타일 중 가장 예쁜 타일을 붙인다. 이렇게 바닥의 모든 부분..
[백준/Python] 19941 햄버거 분배
·
🧠 Problem Solving(PS)
📌문제 탐색하기길이 N인 벤치 모양의 식탁에 사람들과 햄버거가 단위 간격으로 놓여있름사람들은 자신의 위치에서 거리가 K 이하인 햄버거를 먹을 수 있음식탁의 길이 N, 햄버거를 선택할 수 있는 거리 K, 사람과 햄버거의 위치가 주어졌을 때, 햄버거를 먹을 수 있는 사람의 최대 수해당 문제는 '최대한 많은 사람이 햄버거를 먹을 수 있도록 하는 방법'을 찾는 것이 핵심이다. 왼쪽 사람부터 먹을  햄버거를 선택할 때, 최대한 더 많이 뒤에 남은 사람들이 햄버거를 먹을 수 있도록 선택하면 된다. 즉, 맨 앞 사람부터 마지막 사람까지 그리디하게 햄버거를 선택하면 된다.맨 왼쪽 사람부터 햄버거를 먹는 경우, 뒷사람이 선택할 수 있는 햄버거를 최대한 많이 남기는 방법은 '햄버거를 선택 가능한 구간에서 맨 왼쪽에 놓인..
[백준/Python] 2529 부등호
·
🧠 Problem Solving(PS)
📌문제 탐색하기두 종류의 부등호 기호 ''가 k(2 ≤ k ≤ 9)개 나열된 순서열 A부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 부등호 관계를 만족시키고자 함부등호 기호를 만족시키는 수 = 부등호 관계를 만족하도록 숫자를 넣었을 때, 부등호 기호를 제거하여 숫자를 이어 붙여 만든 수부등호 기호를 만족시키는 정수(첫자리 0인 경우 포함) 중 최댓값, 최솟값 구하기k가 최대 9이고 각 부등호 사이에 0부터 9의 숫자가 서로 겹치지 않도록 들어가야하므로, k가 최대일 때 가능한 숫자 조합의 수는 10! = 3628800이 된다. 즉, 모든 경우를 탐색해도 시간 제한 내에 풀이할 수 있다. 따라서 모든 조합에 대해 부등호 기호를 만족시키는지 확인하고, 만족할 경우에 최댓값, 최솟값을 갱신하면 된다..
[백준/Python] 2210 숫자판 점프
·
🧠 Problem Solving(PS)
📌문제 탐색하기5x5 크기의 숫자판각각의 칸에 0~9 중 하나의 숫자가 적혀있음숫자판의 임의의 위치에서 시작해 인접한 네 방향으로 다섯번 이동해 만들 수 있는 서로 다른 여섯 자리 수의 개수 구하기숫자판의 크기가 5x5로 고정되어 있으므로 모든 경우의 수가 얼마인지 쉽게 구할 수 있다. 해당 문제의 경우 처음 시작점이 총 25곳이 될 수 있고, 각 시작점에서 네 방향으로 이동할 수 있는데 5회 이동해야 하므로 총 경우의 수는 25x4^5 (100x2^8) = 25600이다(경계 바깥으로 이동하는 것이 포함되었으므로 실제 경우의 수는 더 적다). 따라서 모든 경우를 탐색(브루트포스)해도 충분히 제한 시간 내에 문제를 해결할 수 있다. 📌코드 설계하기board 이중 리스트에 숫자판의 정보를 입력받는다.만..
[백준/Python] 1182 부분수열의 합
·
🧠 Problem Solving(PS)
📌 문제 탐색하기N개의 정수로 이루어진 수열 (1 ≤ N ≤ 20)이 수열의 크기가 양수인 부분 수열 중 그 수열의 원소의 합이 S(|S| ≤ 1,000,000)가 되는 경우의 수부분 수열의 개념주어진 수열에서 각 원소는 포함되거나 포함되지 않을 수 있다. 즉, 부분 수열의 모든 경우를 탐색하기 위해 2^N-1(빈 수열 제외)개의 부분 수열을 확인해야 한다.N의 크기가 최대 20으로, 최대 길이인 경우에 부분 수열의 개수는 2^20 - 1이므로 모든 부분 수열에 대해 합을 구해 주어진 S와 비교해보아도 시간 내에 문제를 풀이할 수 있다.모든 부분 수열의 경우를 탐색하기 위해 재귀를 사용할 수 있다.📌 코드 설계하기N과 S를 입력받는다.수열의 원소들 seq 리스트로 입력받는다.모든 원소의 합이 S인 부..
[백준/Python] 16937 두 스티커
·
🧠 Problem Solving(PS)
📌 문제 탐색하기크기 HxW 모눈종이, 스티커 N개모눈종이 크기는 1x1인 칸으로 나누어지고, 간격 1을 두고 선이 그어져 있음i번째 스티커의 크기 : R(i)xC(i)모눈종이에 스티커 2개를 붙이고자 함스티커의 변이 격자의 선과 일치하도록두 개의 스티커가 서로 겹치지 않도록 (인접하는 것은 가능)스티커를 90도 회전 가능스티커가 모눈종이를 벗어나는 것은 불가능두 스티커가 붙여진 넓이의 최댓값 구하기 (두 스티커를 붙일 수 없는 경우 0 출력) 모눈종이의 높이와 너비인 H, W와 스티커의 개수 N이 각각 최대 100을 넘지 않아 주어진 수의 크기가 작으므로, 모든 경우의 수를 탐색하는 브루트포스 알고리즘을 고려해볼 수 있다. N개의 스티커들 중 2가지의 스티커를 골라서 ①둘 다 회전시키지 않는 경우 ②..
[백준/Python] 2467 용액
·
🧠 Problem Solving(PS)
📌 문제 탐색길이 N(2 ≤ N ≤ 100,000)의 용액 배열각각의 용액은 산성 또는 알칼리성산성 : 1부터 1,000,000,000까지의 양의 정수알칼리성 : -1부터 -1,000,000,000까지의 음의 정수두 가지 용액을 섞으면 두 용액의 특성값의 합이 새로운 용액의 특성값이 됨두 용액을 섞어 특성값이 0에 가장 가까운 혼합 용액을 만들어 낼 때를 찾아서, 두 용액 각각의 특성값 구하기산성 용액과 알칼리 용액을 반드시 각각 하나씩 쓸 필요 없음에 주의주어진 조건을 보면 용액의 수가 최대 100,000개이므로, 단순히 모든 용액 쌍을 계산하는 방식은 O(N^2)으로 시간이 매우 오래 걸릴 수 있다. 용액의 리스트가 오름차순으로 정렬되어 있으므로, 리스트의 가장 왼쪽에는 가장 작은 용액, 가장 오른..
[백준/Python] 2805 나무 자르기
·
🧠 Problem Solving(PS)
📌 문제 탐색하기상근이가 필요로 하는 나무 길이는 M미터 (1 ≤ M ≤ 2,000,000,000)나무 한 줄에 N개의 나무(1 ≤ N ≤ 1,000,000) 존재나무 높이는 1,000,000,000보다 작거나 같은 양의 정수 또는 0목재절단기에 높이 H 지정 -> 톱날이 땅으로부터 H미터 위로 올라가서 한 줄에 연속해있는 나무 모두 절단높이가 H보다 큰 나무는 H 위의 부분이 잘리고, 낮은 나무는 잘리지 않음상근이는 높이 H보다 큰 나무의 잘린 부분의 나무를 들고 감적어도 M미터의 나무를 집에 가져가기 위해 절단기에 설정할 수 있는 높이의 최댓값 구하기 나무의 최대 높이가 1,000,000,000이므로, 높이를 한칸씩 줄여가면서 상근이가 M미터의 나무를 가져갈 수 있는지 확인한다면 높은 확률로 시간 ..