Published 2022. 8. 29. 15:04

소스코드

#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에 저장하도록 함.

그리고 출력!

복사했습니다!