๐[๋ฐฑ์ค-2798] ๋ธ๋์ญ(C)
๋ธ๋์ญ ๋ฌธ์
๋ธ๋์ญ ๋ฌธ์ ๋ ์ฃผ์ด์ง ์นด๋์ ์ต๋ ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ์ฃผ์ด์ง ์นด๋ ์ค 3๊ฐ๋ฅผ ์ ํํด ๊ทธ ํฉ์ด ์ต๋ ์ซ์์ ๊ฐ์ฅ ๊ทผ์ ํ๊ฒ ๋ง์ถ๋ ๋ฌธ์ ์ด๋ค.
[์ ๋ ฅ]
5 21
5 6 7 8 9
[์ถ๋ ฅ]
21
๋ธ๋ฃจํธ ํฌ์ค๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ ํ์ํ๋ค.
๋๋ ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด 3๋ฒ์ for๋ฌธ์ ๊ฑฐ์ณค๋ค.
๋จผ์ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ฐ๋ค์ ์
๋ ฅ ๋ฐ์ ๊ฒ์ด๋ค.
๊ทธ ๋ค์ ์ฒซ ๋ฒ์จฐ for๋ฌธ์ ์กฐ๊ฑด์์ ์๋์ ๊ฐ๋ค.
for(int i=0; i<N-2; i++)
(์ฃผ์ด์ง ์นด๋์ ๊ฐ์ - 2) ์ธ N-2๋งํผ ๋ฐ๋ณตํ๋ ์ด์ ๋ i = 0, 1, 2, ... , N-3
๊น์ง ๋ฐ๋ณตํ ๊ฒ์ด๊ณ , ๊ทธ๋์ผ ๋ค์ ์นด๋๋ฅผ 2๊ฐ ๋ ๋ฝ์ ์ด 3๊ฐ์ ์นด๋๋ฅผ ๋ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ ๋ค์ for๋ฌธ์ ์กฐ๊ฑด์์ ์๋์ ๊ฐ๋ค.
for(int j=i+1; j<N-1; j++)
์์ for๋ฌธ ์์์ ๋์ํ๋ฉฐ, j=i+1
์ธ ์ด์ ๋ ์ด๋ฏธ ์์ 1์ฅ์ ์นด๋๋ฅผ ์ ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ๊ฐ์ ์ด์ ๋ก ๋ฐ๋ณตํ๋ ๊ตฌ๊ฐ์ ์ข
์ ์ N-1์ด๋ค.
๋ง์ง๋ง for๋ฌธ์ ์กฐ๊ฑด์์ ์๋์ ๊ฐ๋ค.
for(int k=j+1; k<N; k++)
๋ง์ฐฌ๊ฐ์ง๋ก j์์ ํ ์ฅ์ ๋ฝ์์ผ๋ k=j+1
๋ถํฐ ์์ํ๊ณ , ์ข
์ ์ ๋๊น์ง ๋ฐ๋ณตํด์ผ ํ๋ฏ๋ก N
์ด ๋๋ค.
์ต์ข ์ ์ธ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
[์ฝ๋]
// N(3<=N<=100), M(10<=M<=300000)
// ์ต๋ํ M๊ณผ ๊ฐ๊น๊ฒ ๋ง๋ ๋ค
#include <stdio.h>
int blackjack(int N, int M, int *cards);
int main() {
// N(๋ฝ๋ ์นด๋์ ์)
// M(๋ง์ถฐ์ผ ํ๋ ์นด๋์ ์ซ์ ํฉ)
int N, M;
scanf("%d %d", &N, &M);
if(3>N || N>100 || 10>M || M>300000) {
printf("๋ฒ์ ์ค๋ฅ");
return 0;
}
// ์ฑ
์์ ๋์ฌ์ง ์นด๋
int cards[N];
for(int i=0; i<N; i++) {
scanf("%d", &cards[i]);
}
blackjack(N, M, cards);
return 0;
}
int blackjack(int N, int M, int *cards){
int result = 0;
int sum = 0;
int check = 0;
for(int i=0; i<N-2; i++) {
for(int j=i+1; j<N-1; j++) {
for(int k=j+1; k<N; k++) {
sum = cards[i] + cards[j] + cards[k];
if(sum > result && sum <= M)
result = sum;
}
}
}
printf("%d", result);
return result;
}
๋๊ธ๋จ๊ธฐ๊ธฐ