coding_test/programmers
lv1 / 수박수박수박수박수박수? / C
CodeJin
2021. 10. 12. 13:21
https://programmers.co.kr/learn/courses/30/lessons/12922
코딩테스트 연습 - 수박수박수박수박수박수?
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한
programmers.co.kr
길이 n의 문자열에서 수, 박을 반복하는 문자열을 반환해야 하는 문제. 리턴할 문자열을 동적할당해야하는데, 무작정 sizeof(char) * n만큼 할당하면 끝없는 맞왜틀의 굴레에 빠진다.
한글은 영어와 다르게 한 글자임에도 여러바이트를 차지한다. 이는 컴파일러에 따라 차이가 있는데 msvs의 경우 2바이트, gcc의 경우 3바이트를 차지한다. 이를 몰라도 풀 수는 있지만, 난 다 풀고나서 다른 사람의 풀이를 보고 깨달았다.
1. 바이트 수를 알아 덤프를 방지하는 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(int n) {
// 리턴할 값은 메모리를 동적 할당해주세요.
int i;
char* arr[] = {"수", "박"};
char* answer = (char*)malloc(sizeof(char) * 3 + 1);
strcpy(answer, "수\0");
for (i = 1; i < n; i++) {
strcat(answer, arr[i % 2]);
}
return answer;
}
2. 모를때 (사실 이게 제일 정석이 아닐까 싶긴 하다.)
char* solution(int n) {
// 리턴할 값은 메모리를 동적 할당해주세요.
int i;
char* arr[] = {"수", "박"};
char* answer = (char*)malloc(sizeof(arr[0]) * n);
strcpy(answer, arr[0]);
for (i = 1; i < n; i++) {
strcat(answer, arr[i % 2]);
}
return answer;
}