관리 메뉴

cococo-coding

2798번. 블랙잭 본문

[BOJ] 코드 모음/C_baekJoon

2798번. 블랙잭

_dani 2023. 11. 27. 17:51

최종 코드

#include <stdio.h>

int main() {
    //1. 카드 개수n와 숫자m를 입력받는다.
    //2. 카드들을 입력받는다. 
    //3. 카드 중에 합이 M을 넘지 않으면서 최대한 가까운 3장을 찾는다.
    //4. 3장의 합을 출력한다.

    //1
    int n=0,m=0;
    scanf("%d %d\n", &n, &m);

    //2
    int card[100]={0}; //카드 배열 생성
    for(int i=0; i<n; i++){ //카드 n번 입력
        scanf("%d ", &card[i]);
    }

    //3
    int max=0;
    int sum=0;
    for(int i=0; i<n; i++){
        for(int j=i+1; j<n; j++){
            for(int k=j+1; k<n; k++){
                 sum=card[i]+card[j]+card[k];
            if(sum<=m && max<sum){
            max=sum;
            }
        }  
        } 
    }
    //4
    printf("%d\n", max);

    return 0;
}

내가 풀어놓고도 왜 맞은지 모르겠는.. 

우선 원래는 배열을 안 쓰고 그냥 n번 돌려서 입력받으려고 했으나, 배열을 생성하는 게 max를 구할 때 편할 거 같아 변경했다.

3번에서 많이 헷갈렸는데 처음에는 그냥 for문 하나로 card[i]+card[i+1]+card[i+2]반복문을 돌렸는데 오류가 났다.

알고보니 차례로만 sum을 구하는 게 아니라, 여려가지 조합이 필요하므로 for문을 3개를 써주는 게 맞았다.

여기서 구한 sum이 m보다 작거나같고, max보다 크면 이를 다시 max로 저장하는 방식을 썼다.

 

느낀 점

for반복문에서 시작과 끝 숫자를 잘 판단하는 게 중요한 거 같다. 

 

2023.11.27

'[BOJ] 코드 모음 > C_baekJoon' 카테고리의 다른 글

2292번. 벌집  (1) 2023.11.27
1978번. 소수 찾기  (1) 2023.11.26
10250번. ACM 호텔  (1) 2023.11.23
1157번. 단어 공부  (2) 2023.11.23
2920번. 음계  (1) 2023.11.22