◇ 문제 설명
카드를 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입니다.
◇ 초기 내용
◇ 답안
#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;
}
◇ 실행결과
◇ 출처
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io
'Cospro 2급 > C언어' 카테고리의 다른 글
[6차] 문제6. 비밀번호는 만드는것보다 검사하는게 힘들죠. 답안 및 풀이 (0) | 2021.05.30 |
---|---|
[6차] 문제5. 음료수 마시기. (빈병으로 음료수를 사세요!) 답안 및 풀이 (0) | 2021.05.30 |
[6차] 문제3. 단체 유니폼 맞추기 답안 및 풀이 (0) | 2021.05.30 |
[6차] 문제2. 종이 나누어 주기 답안 및 풀이 (0) | 2021.05.30 |
[6차] 문제1. 저는 따뜻한 날이 좋아요. 답안 및 풀이 (0) | 2021.05.30 |
댓글