[3차] 문제6. 타일 색칠 방법 구하기 답안 및 풀이
◇ 문제 설명
예를 들어 타일 길이가 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' 순서대로 타일을 색칠하면 다음과 같습니다.
15번째 타일까지 칠하나, 타일이 한 칸 남았습니다. G색으로는 두칸을 칠해야 하므로 타일을 더 칠할 수 없습니다. 따라서 "-1"을 return합니다.
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
◇ 초기 내용
◇ 답안
#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;
}
◇ 실행결과
◇ 출처
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io