버미

프로그래머스 qr code 본문

코딩 트레이닝

프로그래머스 qr code

Bum_2 2023. 7. 2. 19:36

문제 설명

두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성.

제한사항

  • 0 ≤ r < q ≤ 20
  • r < code의 길이 ≤ 1,000
  • code는 영소문자로만 이루어져 있습니다.

입출력 예

q r code result
3 1 "qjnwezgrpirldywt" "jerry"
1 0 "programmers" "programmers"

문제 풀이


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


char* solution(int q, int r, const char* code) {
    int size = strlen(code);
    int max_size = size / q + 1;
    char* answer = malloc((max_size + 1) * sizeof(char));
    int cnt = 0;

    for (int i = 0; i < size; i++) {
        if ((i % q) == r) {
            char* temp = malloc((cnt + 2) * sizeof(char));
            if (temp != NULL) {
                memcpy(temp, answer, cnt);
                temp[cnt] = code[i];
                temp[cnt + 1] = '\0';
                free(answer);
                answer = temp;
                cnt++;
            }
        }
    }
    return answer;
}

문제에서 제시한 동적 할당을 생각하다보니까 문제 풀이하는데 오래걸렸다. 다른 사람들이 풀어낸 풀이 코드를 보면

char* answer = (char*)malloc(10000);

와 같이 풀어도 해당 문제는 상관 없었을 것 같았다.