지난 학기에는 C언어로만 백준을 풀었었는데
코딩테스트 대비를 위해 이제부터 C++로 풀어보려고 한다!
사실 아직까지 간단한 문제만 풀어서 그런가
C와 크게 다른 점을 느끼지 못하고 있다.
사실 앞에 몇 번 틀렸다ㅜ
내가 틀렸던 이유는
m보다 큰 값은 아무리 m과 가까운 숫자여도 출력되지 않아야 하는데
그 조건을 빠뜨렸었다
1. 스케치를 하면 좋다
2. C++에서 스페이스로 구분하여 입력받는 법은 간단했다
cin>>변수1>>변수2
이런 식으로 한 다음,3. C++ 배열 동적 할당 복습했다
int * valOnCard = new int[n];
delete [] valOnCard;
스케치
메인 알고리즘
1. 카드들 중 세 개를 뽑아 더할 수 있는 모든 경우의 수를 탐색한다
2. 모든 경우의 수를 탐색하기 위해 삼중 for문을 사용한다
< CODE >
#include <iostream>
#include <cstdlib>
using namespace std;
#define MAX 100
int main()
{
int n = 0;
int m = 0;
cin>>n>>m;
//int valOnCard[MAX];
int * valOnCard[] = new int[n]; // 동적할당
for(int i=0; i<n; i++)
{
cin>>valOnCard[i];
}
int n1, n2, n3;
int ans = valOnCard[0] + valOnCard[1] + valOnCard[2];
int tmp;
for(int i=0; i<n-2; i++)
{
n1 = valOnCard[i];
for(int j=i+1; j<n-1; j++)
{
n2 = valOnCard[j];
for(int k=j+1; k<n; k++)
{
n3 = valOnCard[k];
tmp = n1 + n2 + n3;
if (abs(m - tmp) < abs(m - ans) && tmp <= m)
{
ans = tmp;
}
}
}
}
cout<<ans<<endl;
delete[] valOnCard;
return 0;
}