문제출처 : https://www.acmicpc.net/problem/17224
첫번째 시도에서 부분정답을 맞은 제출코드이다.
code
#include <stdio.h> int main() { //N = 문제 개수 L = 역량 K = 최대갯수 int N, L, K, score = 0, i, sub1[100] = { 0 }, sub2[100] = { 0 }; scanf("%d %d %d", &N, &L, &K); for (i = 0; i < N; i++) scanf("%d %d", &sub1[i], &sub2[i]);//풀수있는 최대갯수K가 정해져있는 상태라 i = 0; //입력을 받아놓고 판단해야할거같애서 배열에 저장 while (N) { if (K == 0) //K가 0으로 주어지면 무조건 빠져나오게 먼저break를 걸어줬다 break; if (sub2[i] <= L) //난이도 높은문제를 풀 수 있으면 난이도 쉬운것도 풀수 있으므로 { //먼저 판단해서 140점을 더해준다 score += 140; K--; } else if (sub1[i] <= L) //난이도 높은문제를 못풀지만, 낮은 난이도문제를 풀수있으면 { // 100점을 더해준다 score += 100; K--; } i++; N--; //문제갯수 -- } printf("%d", score); return 0; }
두번째시도에서 완전히 정답을 맞은 제출코드이다.
code
#include <stdio.h> int main() { //N = 문제 개수 L = 역량 K = 최대갯수 int N, L, K, score = 0, i, sub1[100] = { 0 }, sub2[100] = { 0 }; scanf("%d %d %d", &N, &L, &K); for (i = 0; i < N; i++) scanf("%d %d", &sub1[i], &sub2[i]); //이까지는 동일하다. for (i = 0; i < N; i++) //첫번째 시도에서 부분정답을 맞은이유는 배열을 처음부터 돌면서 { //판단을 하다보니, 미처 못세아리고 최대갯수를 초과해서 세지못한 if (K == 0) //난이도높은 문제가 있기 때문이다. break; if (sub2[i] <= L) { score += 140; //그래서 아에 난이도 높은문제부터 쫙돌면서 140점을 더해준다 K--; } } for (i = 0; i < N; i++) { if (K == 0) break; if (sub1[i] <= L && sub2[i] > L) //그다음에 남은문제갯수만큼 난이도 낮은문제 100 { //점을 더해준다. score += 100; K--; } } printf("%d", score); return 0; }
이제 대충 백준 한글로된 그리디알고리즘 브론즈문제는 모두풀었다. (미제도 있지만...)
감히내가 판단하기는 염치없으나 실버5로 진급할때가 됐다ㅋㅋㅋ
다음 백준그리디알고리즘은 실버5문제로 돌아오겠다