티스토리 뷰

 

 

 

구름 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 || 			)    //빈칸
        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);
}

 

 

 

 

 

 

 


 

 

 

 

 

완성 코드

#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);
}

 

 

결과

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

 

 

 

 

 


 

 

 

 

코드 분석

단계 과정
main 타일의 길이를 저장할 변수 tile_length를 선언하고 값을 넣는다.
solution함수를 호출한다.
solution 타일의 갯수에 따라 배열의 크기를 지정하기 위해 malloc를 사용하여 포인터변수 answer를 선언한다.
solution - if 타일은 무조건 R이 연속 3번, G가 연속 2번, B가 한번으로 이어져야 하기 때문에 갯수의 짝이 맞지 않으면 -1를 반환해야 한다.
따라서 RRRGGB 총 6개를 기준으로, 타일의 길이를 6으로 나누었을 때

나머지가 1이면 R이 한번 색칠되기 때문에 성립되지 않는다.
나머지가 2이면 R이 두번 색칠되기 때문에 성립되지 않는다.
나머지가 3이면 R이 세번 색칠되기 때문에 성립한다.
나머지가 4이면 G가 한번 색칠되기 때문에 성립되지 않는다.
나머지가 5이면 G가 두번 색칠되기 때문에 성립한다.
나머지가 0이면 B가 한번 색칠되기 때문에 성립한다.

따라서 나머지가 1,2,4일때 반환값에 -1를 저장한다.
solution 반환값에 -1이 저장되지 않았을 때(성립할때), com배열의 각 색깔과 비교하여 색칠할 색깔을 구하고 배열에 저장한다.
배열 answer를 return한다.
main 결과를 출력한 후 프로그램을 종료한다.

 

 

 

 

 


 

 

 

 

 

 

GroomEdu

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

 

 

 

 

댓글