[코테]/[GroomEdu]
[COS PRO 2급] 6차 4번_카드뽑기 게임! (도박은 안되요!) (C/C++)
Sky_
2021. 5. 29. 21:54
□문제 설명
카드를 3장 뽑아 점수를 내는 게임을 하려고 합니다. 각 카드는 색이 칠해져 있고, 숫자가 적혀 있습니다.
획득한 점수를 계산하는 규칙은 다음과 같습니다.
- 카드 3장의 색이 모두 같다면 획득한 점수는 적힌 숫자의 총합에 3을 곱한 값입니다.
- 카드 2장의 색이 같고, 1장의 색이 다르다면 획득한 점수는 적힌 숫자의 총합에 2를 곱한 값입니다.
- 카드 3장의 색이 모두 다르다면 획득한 점수는 적힌 숫자의 총합입니다.
뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards, cards의 길이 cards_len이 매개변수로 주어질 때, 획득한 총 점수를 return하도록 solution함수를 작성해주세요.
□매개변수 설명
뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards, cards의 길이 cards_len이 매개변수로 주어집니다.
- cards는 3x2 크기인 2차원 배열입니다.
- cards_len은 항상 3입니다.
- caeds의 각 원소는 [색, 숫자] 입니다.
- 카드의 색은 ["red","black","blue"] 중 하나입니다.
- 카드에 적힌 숫자는 1 이상 9 이하인 자연수입니다.
□예시
cards | cards_len | return | |
예시 #1 | [["blue","2"]["red","5"]["black","3"]] | 3 | 10 |
예시 #2 | [["blue","2"]["blue","5"]["black","3"]] | 3 | 20 |
□주어진 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(char* cards[][2], int cards_len) {
int answer = 0;
//빈칸
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);
}
□완성 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(char* cards[][2], int cards_len) {
int answer = 0;
int count=0;
if(!strcmp(cards[0][0],cards[1][0])) count++;
else if(!strcmp(cards[1][0],cards[2][0])) count++;
else if(!strcmp(cards[0][0],cards[2][0])) count++;
for(int i=0;i<cards_len;i++){
answer += atoi(cards[i][1]);
}
if(count>=3)
answer*=3;
else if(count>=1)
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);
}
□코드 분석
단계 | 과정 |
main | 뽑은 카드의 색과 숫자를 문자열로 담은 2차원 배열 cards과 그 길이를 선언한다. solution함수를 호출한다. |
solution | 카드게임의 총점을 저장할 변수 answer를 선언한다. 같은 색의 카드가 몇개인지를 저장할 변수 count를 선언한다. |
solution - if | strcmp함수를 사용하여 색깔의 문자열을 서로 비교한다. if(!strcmp(cards[0][0],cards[1][0])) count++; else if(!strcmp(cards[1][0],cards[2][0])) count++; else if(!strcmp(cards[0][0],cards[2][0])) count++; 이때 strcmp(문자열1, 문자열2)에서 두 문자열이 같으면 0을 반환하는데, c언어에서 0은 false를 의미하므로 not연산자(!)를 사용하여 같을때(!0 -> true) count++를 진행하도록 한다. |
solution - for | cards의 길이만큼 반복한다. atoi함수를 사용하여 문자열로 되어있는 각 카드의 점수를 int형으로 변환한다. answer변수에 각 카드의 점수를 누적시킨다. 이 과정없이 (int)cards[i][1] 등으로 작성할 경우 쓰레기값 출력 |
solution | if문을 사용하여 count가 3일때(모든 카드의 색이 같을 때) answer에 3을 곱한다. count가 1 이상일 때(2개의 카드가 같은 색일 때) answer에 2를 곱한다. 이후 answer를 return한다. |
main | 결과값(answer) ret를 출력한 후 프로그램을 종료한다. |
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io