본문 바로가기
개발적인/대외활동

[대외활동] 코뮤니티 추석맞이 코딩 챌린지

by klm hyeon woo 2021. 9. 18.

 

썸네일은 감성있게 엣지있게 열정있게!

 

몇 번문제까지 참여를 할지는 잘 모르겠지만.. 스터디카페에 와서 심심해서 참여를 해보았다..

ㅌ,, 티스토리가 카카오꺼였나?! 이모티콘 쓰면서 처음 알았다!

 

 

 

 

하여튼 자나꺠나 코딩리뷰 바로 시작-!

 

 

 

 

--

 

1번 문제 : 피보나치 수열

 

--

 

피보나치 수열의 조건식

 

기본적으로 숫자 0과, 1은 그대로 0과 1의 값을 가지고 숫자 2부터 (n-2), (n-1)의 합을 가지게 된다.

뭐, 다양한 접근 방법이 있겠지만 파이썬은 뭔가 너무 직관적으로 다가갈 수 있어서 굳이 C언어를 택했다-!

C언어에서는 배열로 피보나치 수열로 접근을 하였는데, 0과 1의 값은 고정시켜주면서 조건에 부합하는 코드를 짜보았다.

 

#include <stdio.h>

int main(void)
{
    int num = 0;
    
    scanf("%d",&num);
    
    int sum[num];
    
    if(num >= 2) {
        for(int i=0; i<=num; i++) {
            
            sum[0] = 0;
            sum[1] = 1;
            
            if (i >= 2) {
                sum[i] = sum[i-2] + sum[i-1];
            }
        }
        printf("%d\n",sum[num]);
    }
    else {
        printf("2이상의 숫자를 입력해주세요!\n");
    }
}

뭔가 잡다한 세세한 요소들도 넣고싶었으나, 코드가 너무 길어지면 좋지도 않고 결과 값이 잘 나오는것에 일단 초점을 맞춰야하니께-!

 

10을 입력했을 때, 피보나치 수열에서는 55의 값을 출력한다
15를 입력했을 때, 피보나치 수열에서는 610의 값을 출력한다

 

껄껄,, 제가 결석은 하지 않지만 결석 면제권을 하나 준다고 하셔서,,

일단은 열심히 치킨을 향해 풀어보겠나이다,,

(사실 치킨 살쪄서 많이 먹지도 않는데, 일단은 따놓으면 좋잖아유 ✌🏻)

 

--

 

2번 문제 : 정상 정복

 

--

 

 

명절 날 할머니댁에서 이벤트 문제에 대한 알림이 뜬 것을 보고 호다닥 달려왔다-

2번문제는 다름이 아닌 정상 정복이었다!

ㅈ,, 정상정복이요,,?

 

문제에 대한 설명은 다음과 같다.

 

달팽이는 높이가 N인 나무를 올라가고자 한다.

달팽이는 낮에는 A미터를 올라갈 수 있지만, 밤에 휴식을 취하면서 B미터 미끄러져 내려온다.

그렇다면, 달팽이가 나무 정상까지 올라가는데 걸리는 시간은 며칠이 걸릴까?

 

N의 높이를 가진 나무를, 낮에는 A미터 올라가고 밤에는 B미터 미끄러지면..

한번 손코딩을 걸쳐서 XCODE에 바로 대입을 해보았다. (사실 맥북칭구를 두고와서 손코딩했움 코쓱-)

 

#include <stdio.h>

int main(void)
{
    int height, up, down, total, count = 0;
    
    scanf("%d %d %d",&up,&down,&height);
    
    if (up > down) {
        while (1) {
            
            total += (up-down);
            
            if (total >= height) {
                printf("%d\n",count);
                break;
            }
            
            else {
                count++;
            }
        }
    }
    
    else if (down > up) {
        printf("%d\n",-1);
    }
    
    return 0;
    }

 

무한 루프를 통해 계속해서 달팽이가 움직이도록 도와주었다.

달팽이가 오르고 내린 수치를 total이라는 변수에 넣어주면서 무한루프를 돌려주는데,

오르고 내릴때마다 카운터값을 옆에 지정을 해주면서 하루가 지날 때마다 카운트값을 올려주는 형식으로 코딩을 해보았다.

이때 조건문을 통해 total 값이 나무높이를 넘거나 같다면 무한루프에서 탈출을 시켜주면서 카운트 값을 내보낸다.

 

총 5의 크기를 가진 나무에 2만큼의 높이를 올라가고, 1만큼의 높이를 내려온다
내려가는 값이 클 경우에는 -1이라는 값을 출력한다

 

이때, 마인크래프트가 아닌 이상 나무가 아주 지하 깊은 곳에 있을리도 없고 오르는 수치보다 내려가는 수치가 높으면

달팽이는 오르지는 못하고 내려가는 모습만 보여줄 것이다. 그럴때를 위해 내려가는 수치가 더 많으면 -1 이라는 값을 출력하도록 해주었다.

이번 문제는 별 두개짜리 문제였다! 이런 이벤트 문제 너무너무 재밌땽 ٩( ᐛ )و 

 

--

 

3번 문제 : 블랙잭

 

--

 

솔직히 필자는 블랙잭이라는 게임을 처음 들어보았다, 그래서 인터넷에 게임 룰부터 천천히 읽어보고 했던 점은.. 비밀-..

코뮤니티에서도 친절하게 룰과 조건에 대한 부분들을 알려주었다. 아래에 동시에 첨부-!

 

 

카지노에서 자주 플레이되는 블랙잭의 규칙은 카드의 합이 21이 넘지 않는 한도 내에서, 카드의 합을 가장 크게 만드는 게임이다.

이와 유사하게, 코드메이트 버전의 블랙잭은 N개의 카드중 세장의 카드를 뽑아 X를 넘지 않으면서

X와 가장 가까운 수의 카드조합을 골라내는 규칙으로 진행된다.

첫째 줄에는 카드의 개수 N과 목표 값 X가 주어지며,

두번째 줄에는 카드에 쓰여있는 수가 입력으로 주어질 때,

X에 가장 가까우면서 X를 넘지 않는 카드 세장의 합을 구해서 출력하세요.

 

 

 

이렇게 문제를 읽고 나서 바로 든 생각은, N개의 카드와 딜러가 세팅한 카드의 값인 X를 사용자로부터 받아주고

첫번째 카드, 두번째 카드를 고정시켜놓고(반복문을 사용할거라서 이 마저도 변동된다) 세번째, 네번째, 다섯번째 카드를 돌려가며 더해준다.

 더 해줬던 카드들은 SUM에 더해주며 비교해주는데, SUM보다 크고 딜러가 세팅한 카드의 값인 X보다 작다면 MAX에 저장을 해준다.

아니라면, 그냥 훠훠이 지나가버리면서 반복하며 방식을 진행한다.

 

#include <stdio.h>

int main(void) {
    int CardSet, DealTotal, sum, MaxNum = 0;    // X는 카드의 개수, Y는 카드에 쓰여있는 숫자
    
    scanf("%d %d", &CardSet, &DealTotal);
    
    int number[CardSet];
    
    for(int i=0; i<CardSet; i++) {
        scanf("%d", &number[i]);
    }
    
    for(int x=0; x<CardSet; x++) {
        for(int y=x+1; y<CardSet; y++){
            for(int z=y+1; z<CardSet; z++){
                sum = number[x] + number[y] + number[z];
                if (sum > MaxNum && sum <= DealTotal){
                MaxNum = sum;
                }
            }
        }
    }
    printf("%d\n",MaxNum);
    
    return 0;
}

 

5장의 카드에서 딜러는 21이라는 숫자를 선언했다
8장의 카드에서 딜러는 100의 숫자를 선언했다

코드 언어로 이렇게 프로그램 한 부분 한 부분 창조해낼 수 있다는 것에 오늘 또 놀랍게 다가온다.

요즘은 코딩하는 맛에 인생을 사는 것 같은데, 이 텐션이 쭈욱- 유지되었으면,

이벤트 문제는 엄청 어려워보이던데 한번 노력해서 풀어보긴 해보자-!

그러면 약속의 1, 2, 3번 문제도 클리어- ᕕ( ᐛ )ᕗ 

 

댓글