본문 바로가기
Cospro 2급/C언어

[6차] 문제4. 카드뽑기 게임! (도박은 안되요!) 답안 및 풀이

by SRin23 2021. 5. 30.

◇ 문제 설명

카드를 3장 뽑아 점수를 내는 게임을 하려고 합니다. 각 카드는 색이 칠해져 있고, 숫자가 적혀 있습니다.
획득한 점수를 계산하는 규칙을 다음과 같습니다.

1. 카드 3장의 색이 모두 같다면 획득한 점수는 적힌 숫자의 총합에 3을 곱한 값 입니다.
2. 카드 2장의 색이 같고, 1장의 색이 다르다면 획득한 점수는 적힌 숫자의 총하베 2를 곱한 값 입니다.
3. 카드 3장의 색이 모두 다르다면 획득한 점수는 적힌 숫자의 총합입니다.

뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards, cards의 길이 cars_len이 매개변수로 주어질때, 획득한 총 점수는 return하도록 solution함수를 작성해주세요.

 

◇ 매개변수 설명

뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards, cards의 길이 cars_len이 solution함수의 매개변수로 주어집니다.
 ▶ cards는 3x2 크기인 2차원 배열입니다.
 ▶ cards_len은 항상 3입니다.
 ▶ cards의 각 원소는 [색, 숫자]입니다.
 ▶ 카드의 색은 ["red", "black", "blue"] 중 하나입니다.
 ▶ 카드에 적힌 숫자는 1이상 9이하인 자연수입니다.

 

◇ return값 설명

획득한 총 점수를 return합니다.

◇ 예시

  cards cards-len return
예시 #1 [["blue", "2"],["red", "5"],["black", "3"]] 3 10
예시 #2 [["blue", "2"],["blue", "5"],["black", "3"]] 3 20

 

◇ 예시 설명

예제 #1
모든 카드 색이 모두 다르기 때문에 획득한 점수는 적힌 숫자의 총합인 10입니다.

예제 #2
두 카드의 색이 같고, 1장의 색만 다릅니다. 따라서 획득한 점수는 적힌 숫자의 총합에서 2를 곱한 20입니다.

 

◇ 초기 내용

[출처]goormedu COSPRO 2급 기출문제 [6차] 문제4 초기내용

 


◇ 답안

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(char* cards[][2], int cards_len) {
    int answer = 0;
    int red = 0;
    int black = 0;
    int blue = 0;
	
    for(int i = 0; i<cards_len; i++){
      answer += atoi(cards[i][1]);
      if(cards[i][0]=="red")
        red++;
      else if(cards[i][0]=="blue")
        blue++;
      else
        black++;
    }
	
    if(red == 3 || blue == 3 || black == 3){
      answer *= 3;
    }else if(red == 2||blue==2||black==2){
      answer *= 2;
    }
	
    return answer;
}

int main() {
    char* cards1[][2] = {{"blue", "2"}, {"red", "5"}, {"black", "3"}};
    int cards_len1 = 3;
    int ret1 = solution(cards1, cards_len1);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);

    char* cards2[][2] = {{"blue", "2"}, {"blue", "5"}, {"black", "3"}};
    int cards_len2 = 3;
    int ret2 = solution(cards2, cards_len2);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

 

◇ 답안 힌트

    ▶ atoi는 stdlib.h 헤더 파일 안에 있는 문자열을 정수로 바꾸어주는 함수이다.

    ▶ cards[][]의 열이 0인 인덱스에는 카드의 색상이, 열이 1인 인덱스에는 카드의 번호가 적혀있습니다.

 

◇ 답안 풀이

(※ 실행 흐름 순으로 해석됩니다.)

<전체 코드를 작성하는 문제입니다.>

int solution(char* cards[][2], int cards_len) {
    int answer = 0;

 

    //각각 색깔의 개수를 세는 변수
    int red = 0;
    int black = 0;
    int blue = 0;

    for(int i = 0; i<cards_len; i++){

      //atoi는 stdlib.h헤더 파일 안에 있는 문자열을 정수로 바꿔주는 함수이다.

      //cards[][]의 열이 1인 인덱스에는 카드의 번호가 적혀있습니다.
      answer += atoi(cards[i][1]);

    

      //card[][]의 열이 0인 인덱스에는 카드의 색깔이 적혀있습니다.

      //일치하는 색깔이 있다면 색깔을 나타내는 변수의 수를 1증가 합니다.
      if(cards[i][0]=="red")
        red++;
      else if(cards[i][0]=="blue")
        blue++;
      else
        black++;
    }

 

    //만약, 색깔 3개가 다 맞다면 전체 점수 x 3
    if(red == 3 || blue == 3 || black == 3){
      answer *= 3;

    }

    //만약, 색깔 2개가 맞다면 전체 점수 x 2

    else if(red == 2||blue==2||black==2){
      answer *= 2;
    }

    return answer;
}

 

◇ 실행결과

[6차] 문제4) 카드뽑기 게임!(도박은 안되요!) 실행결과

 

◇ 출처

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

COS PRO 2급 기출문제 - C언어 - 구름EDU

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

 

댓글