Cospro 2급/C언어

[3차] 문제6. 타일 색칠 방법 구하기 답안 및 풀이

SRin23 2021. 5. 15. 22:54

◇ 문제 설명

예를 들어 타일 길이가 11이면, "RRRGGBRRRGG"의 색으로 칠할 수 있습니다. 타일 길이가 매개변수 tile_length로 주어질때, 타일을 색칠한 순서를 문자열로 return하는 solution함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.
순서에 맞게 타일을 칠할 수 없다면 -1을 return해 주세요.

 

◇ 매개변수 설명

타일 길이 tile_length가 solution 함수의 매개변수로 주어집니다.
 ▶ tile_length는 1,000이하의 자연수 입니다.

 

◇ return값 설명

타일을 색칠한 순서를 문자열로 return해주세요
 ▶ 순서에 맞게 타일을 칠할 수 없다면 -1을 return해주세요.

 

◇ 예시

  tile_length answer
예시 #1 11 "RRRGGBRRRGG"
예시 #2 16 "-1"

 

◇ 예시 설명

예시 #1
다음과 같은 순서로 타일을 칠하면 됩니다.
 ▶ 'R' - 3장
 ▶ 'G' - 2장
 ▶ 'B' - 1장
 ▶ 'R' - 3장
 ▶ 'G' - 2장
 따라서 "RRRGGBRRRGG"를 return하면 됩니다.

예시 #2
타일 길이는 16입니다.
'R', 'G', 'B' 순서대로 타일을 색칠하면 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
R R R G G B R R R G G B R R R G
15번째 타일까지 칠하나, 타일이 한 칸 남았습니다. G색으로는 두칸을 칠해야 하므로 타일을 더 칠할 수 없습니다. 따라서 "-1"을 return합니다.

 

◇ 초기 내용

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

 


◇ 답안

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


char* solution(int tile_length) {
    char* answer = (char*)malloc(sizeof(char) * (tile_length + 1));
    char com[6] = { 'R','R','R','G','G','B' };
    if (tile_length % 6 == 1 || tile_length % 6 == 2 || tile_length % 6 == 4)
        strcpy(answer, "-1");
    else {
        for (int i = 0; i < tile_length; i++)
            answer[i] = com[i % 6];
        answer[tile_length] = '\0';
    }
    return answer;
}

int main() {
    int tile_length1 = 11;
    char* ret1 = solution(tile_length1);
    printf("solution 함수의 반환 값은 %s 입니다.\n", ret1);

    int tile_length2 = 16;
    char* ret2 = solution(tile_length2);
    printf("solution 함수의 반환 값은 %s 입니다.\n", ret2);
}

 

◇ 답안 힌트

    ▶ RGB의 규칙성을 찾으세요

    ▶ 어떻게 했을때 이 규칙성이 깨지는지를 찾으세요

 

◇ 답안 풀이

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

 

.int main() {
    int tile_length1 = 11;
    char* ret1 = solution(tile_length1);


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

    int tile_length2 = 16;
    char* ret2 = solution(tile_length2);


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


char* solution(int tile_length) {
    char* answer = (char*)malloc(sizeof(char) * (tile_length + 1));
    char com[6] = { 'R','R','R','G','G','B' };

 

    //타일의 규칙은 RRRGGB로 6개로 이루어짐, RRR이 R또는 RR로 끊기면 안되고, 
    //BB가 B로 끊기면 안된다는 예외가 존재하므로,

    //tile_length % 6 == 1 || tile_length % 6 == 2 || tile_length % 6 == 4를 작성해야함
    if (tile_length % 6 == 1 || tile_length % 6 == 2 || tile_length % 6 == 4)
        strcpy(answer, "-1");
    else {
        for (int i = 0; i < tile_length; i++)
            answer[i] = com[i % 6];
        answer[tile_length] = '\0';
    }
    return answer;
}

 

◇ 실행결과

[3차] 문제6) 타일 색칠 방법 구하기 실행 결과

 

◇ 출처

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