Baekjoon(130)
-
[BOJ 2229] 조 짜기
- 문제 요약 첫째 줄에 학생의 수 N이 주어진다. 다음 줄에는 N명의 학생들의 점수가 나이 순서대로 주어진다. 각 학생의 점수는 0 이상 10,000 이하의 정수이다. 이 학생들을 묶어 조를 편성하려 한다. 가급적이면 실력 차이가 많이 나도록 조를 편성해야 한다. 조의 개수는 상관이 없다.각각의 조가 잘 짜여진 정도는 그 조에 속해있는 가장 점수가 높은 학생의 점수와 가장 점수가 낮은 학생의 점수의 차이가 된다. 또한 전체적으로 조가 잘 짜여진 정도는, 각각의 조가 잘 짜여진 정도의 합으로 나타난다. 한 명으로 조가 구성되는 경우에는 그 조의 잘 짜여진 정도가 0이 된다(가장 높은 점수와 가장 낮은 점수가 같으므로).학생들의 점수가 주어졌을 때, 조가 잘 짜여진 정도의 최댓값을 구하는 프로그램을 작성..
2024.12.04 -
[BOJ 1016] 제곱 ㄴㄴ 수
- 문제 요약 어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다 min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수가 몇 개 있는지 출력한다.(1 - 알고리즘 정리 문제에서 제공한 min의 범위를 확인해보면, 최대 1조까지라는 것을 확인할 수 있습니다.그러므로 단순히 반복문을 돌기만 하면, 제한시간 내에 문제를 해결할 수 없습니다. min 문제에서는 min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수를 구하라고 했습니다.위 조건을 보고 다시 문제를 읽어보면, 봐야할 범위는 100만이라는 것을 알 수 있습니다. (눈속임.) 그러므로 위 사실과 에라토스테네스의 체를 이용해서 조건에 맞는 수를 구..
2024.11.22 -
[BOJ 19951] 태상이의 훈련소 생활
- 문제 요약 연병장은 일렬로 이어진 N개의 칸으로 이루어져 있으며 각 칸마다 높이를 가지고 있고, 첫 번째 칸부터 순서대로 1번, 2번, 3번, ..., N번 칸으로 명칭이 붙어있다. 조교들은 총 M명이 있으며, 각 조교들은 태상이에게 a번 칸부터 b번 칸까지 높이 k만큼 흙을 덮거나 파내라고 지시한다. 흙은 주변 산에서 얼마든지 구할 수 있으므로 절대로 부족하지 않다.태상이는 각 조교의 지시를 각각 수행하면, 다른 조교의 지시로 흙을 덮어둔 칸을 다시 파내기도 하는 비효율적인 일이 발생하는 것을 깨달았다. 그래서 태상이는 각 조교의 지시를 모아 연병장 각 칸의 최종 높이를 미리 구해 한 번에 일을 수행하려고 한다.불쌍한 태상이를 위해 조교들의 지시를 모두 수행한 뒤 연병장 각 칸의 높이를 구하자. ..
2024.11.21 -
[BOJ 10453] 문자열 변환
- 문제 요약 1. ab는 좋은 문자열이다. 2. 만약 문자열 [S]가 좋은 문자열이라면, 오른쪽과 왼쪽 끝에 각각 a와 b를 추가한 문자열 a[S]b 또한 좋은 문자열이다. 3. 만약 문자열 [S]와 [T]가 좋은 문자열이라면 이들을 붙여 쓴 [S][T] 또한 좋은 문자열이다. 첫 줄에 테스트 케이스의 수 T가 주어진다. 각각의 테스트 케이스마다, 한 줄에 문자열 A, B가 공백으로 분리되어 주어진다. (2문자열 A를 '인접한 두 문자를 서로 바꾸는' 연산을 통해 문자열 B로 바꾸려고 한다. 이때 필요한 연산의 최소 횟수를 구하는 프로그램을 작성하시오. A를 B로 바꾸는 중에 나타나는 문자열도 모두 좋은 문자열이어야 한다. - 알고리즘 정리 문자열 A에서 인접한 두 문자를 서로 바꾸는 연산을 통해 문..
2024.11.19 -
[BOJ 4563] 리벤지 오브 피타고라스
- 문제 요약 A^2 + B^2 = C^2피타고라스 정리에서 A(2A)의 개수를 구하시오.(입력은 여러 개의 테스트케이스로 이루어져 있으며, 입력의 마지막 줄에는 0이 하나 주어진다.) - 알고리즘 정리 피타고라스 정리 수식을 변형해서 문제를 해결할 수 있습니다. A^2 + B^2 = C^2A^2 = C^2 - B^2 = (C+B)(C-B) = x * y(A^2의 약수에서 조건 설정 후 걸러내기) - 코드 작성 #includeusing namespace std;typedef long long ll;int result;int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); while(true){ ll a; cin>>a..
2024.11.19 -
[BOJ 2631] 줄 세우기
- 문제 요약 N명의 아이들이 임의의 순서로 서 있을 때, 번호 순서대로 배치하기 위해 옮겨지는 아이의 최소 수를 구하는 프로그램을 작성하시오. - 알고리즘 정리 옮겨지는 아이의 수를 최소로 하기 위해서는 현재 서 있는 줄에서 LIS를 찾고, 전체 어린이 수에서 LIS의 길이를 빼주면 됩니다. - 코드 작성 #includeusing namespace std;#define MAX 201int n,arr[MAX],dp[MAX],mx;int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n; for(int i=0;i>arr[i]; } for(int i=0;iarr[j] && dp[i]
2024.11.19