본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.54] 6차 문제 4 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 29.
반응형

6차 문제 4


문제 설명

 

카드를 3장 뽑아 점수를 내는 게임을 하려고 합니다. 각 카드는 색이 칠해져 있고, 숫자가 적혀 있습니다.

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

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


예시

 

cards cards_len return 
[["blue", "2"], ["red", "5"], ["black", "3"]] 3 10
[["blue", "2"], ["blue", "5"], ["black", "3"]] 3 20

코드 해석 및 전체 코드

 

카드의 색은 3개로 "blue", "red", "black"이고 카드에 적힌 숫자는 1 ~ 9이며, cards의 원소는 [색][숫자]이다.

 

1. 카드의 3가지 색 중 각 몇 개씩 있는지 구한다.

구하기 위해 cnt라는 배열을 3으로 잡아준다.

for문을 cars_len만큼 반복하여 구한다. 

문자열 비교함수 strcmp(string compare)를 사용하여 "blue"이면 cnt[0]을 1 증가, "red"이면 cnt[1]을 1 증가, "black"이면 cnt[2]를 1 증가한다. 

strcmp(문자열1, 문자열2) 형태로 0, 1, -1을 반환한다. 

형식 반환값 설명
printf("%d\n", strcmp("aa", "aa")); 비교대상이 같을 경우 0을 반환한다. 
printf("%d\n", strcmp("ab", "aa")); 1 비교대상 중 전자가(ab)가 클 경우 1을 반환한다.
(아스키코드 기준 "ab" = 97, 98   "aa" = 97, 97)
printf("%d\n", strcmp("aa", "ab")); -1 비교대상 중 후자가(ab)가 클 경우 -1을 반환한다.

 

2. 모든 카드의 숫자의 합을 더한다. 

cards[][]배열은 문자열 배열이어서 숫자도 문자열 형태로 되어있다. 

문자열을 인트형으로 반환해주는 함수를 사용하여 answer에 더한다. 

형식 : atoi(인트형으로 변환할 문자열)

 

2. 3가지 색 중 한 가지 색이 3이거나 2인지 찾는다. 

3가지 색 모두가 같으면 모든 숫자의 합에 곱하기 3을, 2가지 색이 같다면 모든 숫자의 합에 곱하기 2를 한다. 

두번째 for문에서 카드 종류만큼 반복하여 

카드 색의 합이 담긴 배열이 3이면 answer에 3을 곱한 뒤 for문을 탈출한다. 

3이 아니고 2일 경우 answer에 2를 곱한 뒤 for문을 탈출한다. 

 

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

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

		answer += atoi(cards[i][1]);
	}

	for (int i = 0; i < 3; i++) {
		if (cnt[i] == 3) {
			answer *= 3;
			break;
		}
		else if (cnt[i] == 2) {
			answer *= 2;
			break;
		}
	}
	return answer;
}
int main() {
	const char* cards1[][2] = { {"blue", "2"}, {"red", "5"}, {"black", "3"} };
	int cards_len1 = 3;
	int ret1 = solution(cards1, cards_len1);

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

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

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

cos pro 2급 기출문제

github

 

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

 

반응형

댓글