본문 바로가기
코딩테스트/C언어

[Level1] 수박수박수박수박수박수? 답안 및 풀이

by SRin23 2021. 6. 6.

◇ 문제 설명

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

 

◇ 제한 조건

  • n은 길이 10,000이하인 자연수입니다.

 

◇ 입출력 예시

n return
3 "수박수"
4 "수박수박"

 

◇ 초기 내용

※ [출처] 프로그래머스-코딩테스트 연습-문제명

※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.

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

char* solution(int n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    char* answer = (char*)malloc(...);
    return answer;
}

 


 

◇ 답안

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

char* solution(int n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    char* answer = (char*)malloc(3 * n );
    memset(answer, NULL, sizeof(answer));
    
    for(int i = 0; i<n; i++){
        if(i%2==0){
            strcat(answer, "수");
        }else{
            strcat(answer, "박");
        }
    }
    return answer;
}

 

◇ 답안 힌트

    ▶ 문자열은 끝에 NULL이 들어갑니다. (메모리 +1)

    ▶ 만약 홀수면 박, 짝수면 수를 문자열에 추가합니다.

    ▶ 문자열 추가 함수는 strcat()입니다.

 

◇ 답안 풀이

(※ 실행 흐름 순으로 해석됩니다.)


char* solution(int n) {

    //한국어는 한글자당 2byte이며, 각 문자열이므로 NULL의 메모리를 추가하여 3 * n만큼 메모리 할당
    char* answer = (char*)malloc((2 + 1)  * n );

    //메모리의 내용을 모두 NULL로 초기화
    memset(answer, NULL, sizeof(answer));

 

    //0~n까지 for문을 반복하며, 만약 i가 짝수면 "수"를, 홀수면 "박"을 answer 문자열에 추가

    //문자열 추가 함수 strcat(추가 받을 값, 추가되는 값)
    for(int i = 0; i<n; i++){
        if(i%2==0){
            strcat(answer, "수");
        }else{
            strcat(answer, "박");
        }
    }
    return answer;
}

 

 

◇ 실행결과

수박수박수박수박수박수? 실행결과

 

◇ 출처

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

댓글