소스코드
#include <stdio.h>
#include <string.h>
int main (){
int N, M, i, j, k;
scanf("%d %d", &N, &M);
int a[N];
for (i = 0; i<N; i++){
scanf("%d", &a[i]);
}
int ans, diff, min;
min = M;
for (i=0; i<N; i++){
for (j=0; j<N; j++){
for (k=0; k<N; k++){
if (i!=j && j!=k && k!=i && a[i] + a[j] + a[k] <= M) {
diff = M-(a[i] + a[j] + a[k]);
if (diff < min) {
min = diff;
ans = a[i] + a[j] + a[k];
}
}
}
}
}
printf("%d", ans);
}
해설
의외로 첫번쨰 시도만에 풀었다. 나 조금 늘었을지도? ㅎ.. (아님)
이문제는 for loop을 세 번이나 쓴게 조금 마음에 안 들긴 하지만.. 조합 알고리즘을 쓰기에는 실력이..
조합 써서 풀어보고는 싶음.
스캔을 수열로 받고, 수열을 for loop 세번 돌리면서 합이 21 이하이고 세 수가 모두 다르면서 차이가 가장 적은 경우를 ans에 저장하도록 함.
그리고 출력!
'solving > C, C++' 카테고리의 다른 글
[백준] 1181번 단어 정렬 (O(nlogn) 정렬 알고리즘, strcmp) (0) | 2022.08.29 |
---|---|
[백준] 2609번 최대공약수와 최소공배수 (0) | 2022.08.29 |
[백준] 1157번 단어 공부 (0) | 2022.08.28 |
[백준] 10809번 알파벳 찾기 (ASCII 코드로 소-대문자, 소문자-숫자 변환) (0) | 2022.08.27 |
[백준] 3052번 나머지 (다시 풀어볼 것) (0) | 2022.08.27 |