티스토리 뷰
□문제 설명
카드를 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
'[코테] > [GroomEdu]' 카테고리의 다른 글
[COS PRO 2급] 6차 6번_비밀번호는 만드는것 보다 검사하는게 힘들죠 (C/C++) (0) | 2021.05.29 |
---|---|
[COS PRO 2급] 6차 5번_음료수 마시기 (빈병으로 음료수를 사세요!) (C/C++) (0) | 2021.05.29 |
[COS PRO 2급] 6차 3번_단체 유니폼 맞추기 (C/C++) (0) | 2021.05.29 |
[COS PRO 2급] 6차 2번_종이 나누어 주기 (C/C++) (0) | 2021.05.28 |
[COS PRO 2급] 6차 1번_저는 따뜻한 날이 좋아요 (C/C++) (0) | 2021.05.28 |
댓글
공지사항
최근에 올라온 글
TAG
- groomedu
- groom
- 코스프로
- 자바
- CosPro
- 구름에듀 기출문제
- 구름에듀
- lv1
- 배열
- cospro기출문제
- 구름 기출문제
- C
- YBM
- COSPRO 2급
- lv2
- 배열활용문제
- 기출문제
- cospro기출
- c언어
- 코딩테스트
- programmers
- 알고리즘
- 1급
- 연습문제
- Java
- 프로그래머스
- Cos Pro
- C++
- YBM기출
- c언어 기출문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함