https://programmers.co.kr/learn/courses/30/lessons/12922
길이 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;
}
'coding_test > programmers' 카테고리의 다른 글
lv1 / K번째 수 / C++ (0) | 2021.12.20 |
---|---|
lv1 / 없는 숫자 더하기 / C, C++ (0) | 2021.11.03 |
lv1 / 내적 / C (0) | 2021.09.17 |
lv1 / 3진수 뒤집기 / C++ (0) | 2021.09.12 |
lv1 / 3진수 뒤집기 / C (0) | 2021.09.12 |