N개의 숫자를 입력 받아서 M에 가까운 3개의 숫자 합을 출력하는 문제
1차원 배열을 동적할당해서 N개의 숫자를 num 배열에 할당
삼중 for문으로 가능한 세 숫자의 합을 모두 건든다
세 숫자의 합이 M보다 작거나 같으면서 result보다 클 때까지 반복하면
결국 M에 가까운 세 숫자의 합을 찾을 수 있다
result에 찾은 세 숫자의 합을 할당하고 출력하면 끝
💻소스코드
#include <iostream>
using namespace std;
int main(void)
{
int N, M; // N: 카드의 개수, M: 근접해야 되는 값
cin >> N >> M;
int *num = new int [N];
int result = 0;
for (int i = 0; i < N; i++)
cin >> num[i];
for (int i = 0; i < N; i++){
for (int j = i + 1; j < N; j++){
for (int k = j + 1; k < N; k++){
if (num[i] + num[j] + num[k] <= M && num[i] + num[j] + num[k] > result)
result = num[i] + num[j] + num[k];
}
}
}
cout << result << "\n";
delete [] num;
return 0;
}
자연수 N의 가장 작은 생성자를 구하는 문제
256(245 + 2 + 4 + 5)
에서 245는 256의 생성자다
i는 1부터 N까지 반복result = i; partition = i;
partition의 각 자리수를 더해서 result에 할당
result==N
이면 i가 생성자라는 의미이므로 i 출력
이 때 가장 작은 생성자를 출력하라 했으니 하나만 출력하고return 0;
반복문에서 출력을 안하면 생성자가 없었다는 의미니까 0을 출력하고 끝
💻소스코드
#include <iostream>
using namespace std;
int main(void)
{
int N;
int result = 0;
int partition;
cin >> N;
for(int i = 1; i < N; i++){
result = i;
partition = i;
while (partition){ // partition 각 자리수를 더함
result += partition % 10;
partition /= 10;
}
if (result == N){
cout << i;
return 0; // 가장 작은 생성자만 출력하고 프로그램 종료
}
}
cout << "0\n"; // 생성자가 없을 시 0 출력
return 0;
}
덩치 순위를 구하는 문제
몸무게와 키 모두 커야 덩치가 크다고 한다
둘 중 하나만 크거나 작으면 덩치를 비교할 수 없다
몸무게와 키를 입력받아서 2차원 배열에 넣어두고
각 요소의 키와 몸무게를 일일이 비교한다
비교 대상보다 덩치가 큰 요소를 발견하면덩치 순위++
덩치 순위를 출력해주면 끝
💻소스코드
#include <iostream>
using namespace std;
int main(void) {
int N; // 2 <= N <= 50
int arr[50][2]; // ([0]: 몸무게, [1]: 키)를 저장할 배열
int rank[50];
fill_n(rank, 50, 1); // 덩치 등수를 나타내기 위해 1로 초기화
cin >> N;
for (int i = 0; i < N; i++)
cin >> arr[i][0] >> arr[i][1];
for (int i = 0; i < N; i++){ // 브루트 포스, 전부 비교
for (int j = 0; j < N; j++){
if (arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1])
rank[i]++;
}
cout << rank[i] << " ";
}
return 0;
}