본문 바로가기

백준/C++

(132)
[C++] 백준 2631번 - 줄세우기 오늘 열받는 일이 있어서 문제에 집중을 못했다...그래도 오늘이 마지막이니까 ㅎㅎ내일부터는 다시 자유다... 힘들게 일했더니 너무 피곤해서 이 문제는 다음에 다시 봐야겠다...  문제 2631번https://www.acmicpc.net/problem/2631  다이나믹 프로그래밍 배치하는 문제를 만나면 가장 중요한 포인트는 기준을 잡기 -> 오름차순으로 정렬하라고 했으니 오름차순으로 가장 길게 정렬된 부분을 기준 LIS(최장 부분 증가수열): 앞에서부터 뒤로, 각각의 값이 이전 값보다 크고 가장 긴 부분 수열을 뜻함 #include #include using namespace std;int main() { int N = 0, result = 0; scanf("%d", &N); int child[201],..
[C++] 백준 2792번 - 보석 상자 문제 2792번https://www.acmicpc.net/problem/2792  색상의 수만큼 보석들(입력값)을 벡터에 넣어준다. 이때 이분탐색을 할 때 필요한 right에 넣을 최대값을 구해준다(가장 개수가 많은 색의 보석). 왜냐하면 보석이 가장 많을 때가 질투심이 최대일 때이니까... (left에는 1을 넣어주면 됨) left와 right의 중간값 mid를 기준으로 입력받은 각 색상의 보석을 나눠준다. 그렇게 나오는 몫이 나눠줄 수 있는 학생의 수이기에 count에 더해주고 나머지가 0이 아닐 경우 더 나눠줄 수 있으니까 count를 1증가시켜준다(if문의 조건에 0이 들어가면 false니까 실행이 안 됨). 최종으로 나온 count값이 학생수 N명보다 작거나 같으면 true를 반환해준다. tru..
[C++] 백준 10867번 - 중복 빼고 정렬하기 오늘은 근로자의 날 기념 콘서트가 있어서 다녀왔다..너무 힘들어서 오늘은 그냥 간단한 문제를 풀어야겠다(내일도 출근해야하니...).  문제 10867번https://www.acmicpc.net/problem/10867 이번에는 입력값을 다 배열에 넣어준 후 정렬을 해준다. 그리고 중복되지 않게 출력해줘야되기 때문에 temp변수에 현재값을 넣어놓고 그 값과 배열의 각 값을 비교해 다르면 temp에 업데이트 해준 후 해당 v[i]값을 출력한다. #include #include using namespace std;int v[100000];int main() { int N, temp = 0; cin >> N; for (int i = 0; i > v[i]; } sort(v, v + N); for (int i = ..
[C++] 백준 6236번 - 용돈 관리 문제 6236번https://www.acmicpc.net/problem/6236  최소 금액을 1로 잡고 최대 금액을 사용할 금액의 합으로 잡는다. 그리고 그 사이의 mid 값을 구해서 mid를 temp변수에 넣고 temp가 사용할 금액(money[i])보다 어떠한지 비교해준다. 사용할 금액보다 temp가 더 크거나 같다면 그대로 temp에서 사용할 금액을 빼준다. 만약 아니라면 사용할 수 있는 금액은 다 사용했다는 것이기 때문에 temp에 인출할 수 있는 돈 mid를 넣어주고 통장에서 빼야되기 때문에 1증가시켜준다. 이제 다시 그 다음 사용할 금액(money[i])과 temp를 비교해서 사용할 금액이 더 크다면 false(인출 금액을 더 키워줘야해서 left를 mid+1로 이동)를 반환해주고, 아니라면..
[C++] 백준 16401번 - 과자 나눠주기 문제 16401번https://www.acmicpc.net/problem/16401 left와 right에 각각 과자의 최소 길이와 최대 길이를 넣어준다. 그리고 그것들의 사이의 길이인 mid를 이용한다. 과자의 길이들을 담은 L배열에 현재 기준으로 잡은 길이인 mid를 나눠 나온 수를 count에 더해준다. 해당 count는 mid의 길이로 몇명에게 나눠줄 수 있는지 보기 위해 count하는 것이다. 몇명나눠줬는지 확인한 count가 조카 수보다 크거나 같다면 과자가 짧아 길이가 더 길어져도 된다는 소리이기 때문에 left의 위치를 mid+1로 옮겨준다. 그리고 나눠줄 수 있는 과자의 최대길이를 저장하는 result변수에 현재 과자의 길이인 mid를 넣어준다(계속 반복하다보면 최대길이가 저장됨). co..
[C++] 백준 2839번 - 설탕 배달 문제 2839번https://www.acmicpc.net/problem/2839 일단 5로 나누어떨어지는지 보고 나누어지면 5를 나눈 몫이 봉지 개수가 된다. 그리고 안 나누어 떨어진다면 3을 빼가며 봉지의 개수를 count해주고 또 5로 나누어떨어지면 5를 나눈 나머지까지 합해서 count해준다. 만약 3을 빼다가 0보다 작아진다면 -1을 출력해준다. #include using namespace std;int main() { int N, count = 0; cin >> N; while (1) { if (N % 5 == 0) { count += N / 5; cout
[C++] 백준 2798번 - 블랙잭 오늘은 너무 졸려서 안 되겠다...JavaScript로 풀었던 브루트포스 문제를 C++로 풀어야지...   문제 2798번https://www.acmicpc.net/problem/2798  #include #include using namespace std;int N, M;vector card;int main(){ cin>>N>>M; for(int i=0;i>a; card.push_back(a); } int sum = 0; int result = 0; for(int i=0;i result&&sum
[C++] 백준 2343번 - 기타 레슨 문제 2343번https://www.acmicpc.net/problem/2343 2343번: 기타 레슨강토는 자신의 기타 강의 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 강의가 들어가는데, 블루레이를 녹화할 때, 강의의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경www.acmicpc.net mid의 조건을 블루레이 크기로 잡는다. 여기서 최소 블루레이의 크기는 담을 수 없는 경우는 배제해야되기 때문에 배열에서 가장 큰 요소로 넣어준다. 그리고 가장 큰 블루레이는 모든 요소의 합(100000(최대N)*10000(최대강의길이))이 된다. 강의들을 sum에 합치다가 sum이 임의로 잡아준 블루레이 크기(mid)보다 크면 블루레이 개수를 하나 증가시키고 sum을 다시 0으로 만들어 준 ..