※ 2798 블랙잭
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
#include <iostream>
using namespace std;
int main() {
int N, M, a[100]; //N: 카드의 개수, a: 카드의 숫자를 저장하는 일차원 배열
int sum = 0, near = 0;
//입력
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> a[i]; //카드의 숫자 입력
}
//완전 탐색(N장의 카드 중 3장의 카드 조합의 경우의 수)
for (int i = 0; i < N; i++) {
for (int j = i+1; j < N; j++) {
for (int k = j + 1; k < N; k++) {
sum = a[i] + a[j] + a[k]; //각 경우의 수마다 3장의 숫자 합을 sum에 저장
//sum이 M보다 작거나 같고 기존 near값보다 크다면 새로운 near값으로 갱신
if (near < sum&&sum <= M) {
near = sum;
}
}
}
}
//출력
cout << near;
}
※ 2231 분해합
https://www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
#include <iostream>
using namespace std;
int main() {
int n, a;
//입력
cin >> n;
//완전 탐색
for (int i = 0; i <= n; i++) { //0과 n 사이의 생성자 찾기
int sum = i;
int tmp = i;
while (tmp > 0) {
//각 자릿수 더하는 로직 (몫과 나머지를 통해 각 자릿수 떼어내기)
sum += (tmp % 10); //기존 sum에 오른쪽 끝자리 수 합하기
tmp /= 10; //합한 오른쪽 끝자리 수 제거
}
if (n == sum) { //분해합이 n과 같아질 경우 생성자 출력
cout << i;
a++;
break;
}
else { //분해합이 n과 같은 경우가 없을 때 생성자 0
a = 0;
}
}
if (a == 0) { //생성자 0 출력
cout << "0";
}
}
'C++' 카테고리의 다른 글
[Algorithm] DFS 프로그래머스 92342 양궁대회 | C++ (0) | 2022.09.01 |
---|---|
[Algorithm] 스택 백준 10799번 쇠막대기 | C++ (0) | 2022.08.26 |
[Algorithm] 정렬 백준 10825번 국영수 | C++ (0) | 2022.08.23 |
[Algorithm] 그리디 프로그래머스 42862번 체육복 | C++ (0) | 2022.08.22 |
[Algorithm] 백트래킹 백준 15649번 N과 M (1) | C++ (0) | 2022.08.01 |
댓글