
메이플스토리에는 전문 기술이라는 제작 시스템이 있다. 전문 기술은 특정량의 피로도가 쌓이는 대신 다양한 장비 및 비약을 제작할 수 있는 시스템이다. 장신구 명장인 임스는 어떻게 하면 더 효율적으로 많은 장신구를 제작할 수 있을지 고민에 빠졌다.
임스가 만들 수 있는 장신구는 개가 있고, 각각의 장신구를 만들면 만큼의 피로도가 누적된다.
피로도가 미만인 경우, 장신구를 제작할 수 있다. 현재 쌓인 피로도가 일 때, 임스가 제작할 수 있는 장신구의 최대 개수를 구해보자!
첫 번째 줄에 정수 와 정수
이 공백으로 구분되어 주어진다.
(, )
두 번째 줄에는 정수 이 공백으로 구분되어 주어진다. ()
제작할 수 있는 장신구의 최대 개수를 출력하시오.
이 문제는 배열 A를 오름차순 정렬하는 것이 포인트이다.
문제 해결의 단계는 아래와 같다.
P로, 장신구의 갯수를 변수 N으로 입력받는다.A로 입력받는다.A를 오름차순 정렬한다.P가 200 미만이면서 장신구의 갯수만큼 반복한다.index에 저장하여 출력한다.#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int asc(const int* a, const int* b) {
return *a - *b; // 오름차순
}
int main() {
int P, N;
scanf("%d %d", &P, &N);
int A[1000];
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
qsort(A, N, sizeof(int), asc);
int index = 0;
while (P<200 && index<N) {
P += A[index++];
}
printf("%d", index);
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int asc(const int* a, const int* b) {
return *a - *b; // 오름차순
}
int main() {
int P, N;
scanf("%d %d", &P, &N);
int A[1000];
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
}
qsort(A, N, sizeof(int), asc);
int index = 0;
while (P<200) { // while (P<200 && index<N)
P += A[index++];
}
printf("%d", index);
}
처음 시도에서는 index의 값이 장신구의 갯수인 N회를 넘어가는 것을 고려하지 못하여 틀렸었다. 이러한 반례를 찾아 수정하였다.
💡한줄평
JS와 권태기인지 자꾸 하기 싫어져서 문제풀이를 스터디 당일까지 최대한 미루다가 푸는 중이다. 그래서 이제는 언어에 제한을 두거나 부담을 가지지 않고 우선 문제 풀이 자체에 친숙해지는 연습을 먼저 하려고 한다. 차차 연습하고 노력하다보면 분명히 성장하는 날이 올 것이다!