반응형

Cos Pro 1급 기출문제 - 1차 문제 10, 0들을 0으로 만들기 에 대한 C언어를 이용한 저의 풀이입니다.

 

목차

  • 문제 설명
  • 매개변수 설명
  • return 값 설명
  • 예제
  • ***풀이 전략***
  • 문제와 답

 

문제 설명

---

0과 1로만 이루어진 문자열에서 연속해서 붙어있는 0들을 하나의 0으로 줄이려 합니다.

예를 들어 "101100011100" 이란 문자열은 "101101110"으로 만들면 됩니다.

0과 1로만 이루어진 문자열 s가 매개변수로 주어질 때, 연속해서 붙어있는 0들을 하나의 0으로 줄인 문자열을 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

매개변수 설명

0과 1로만 이루어진 문자열 s가 solution 함수의 매개변수로 주어집니다.

 

return 값 설명

연속해서 붙어있는 0들을 하나의 0으로 줄인 문자열을 return 해주세요.

 

예시

입력 101100011100

출력 101101110

 

1은 줄이지 않으며, 연속해서 붙어있는 0만 하나의 0으로 줄이면 됩니다.

문제와 답

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
 
char* solution(char* s) {
    char* answer = (char*)malloc(sizeof(char)*1001);
    int idx = 0, length = strlen(s);
    for(int i = 0; i < length; ++i){
        if (s[i] == '0' && s[i+1!= '0')
            answer[idx++= '0';
        // **** Original Code
        // else
        // **** Modified Code 
        else if (s[i] == '1')
            answer[idx++= '1';
    }
    answer[idx] = 0;
    return answer;
}
 
int main() {
    char* s = "101100011100";
    char* ret = solution(s);
    printf("solution 함수의 반환 값은 %s 입니다.\n", ret);
}
cs

 

풀이 전략

if else를 보다보면 01 인 경우에 대해서 0을 넣어주는데,

00인 경우에 대해서는 그냥 1을 넣게끔 되어있다.

그래서 1을 출력하는 상황을 지정해준다.

 

재미있게도 else if 분기를 하나 더 만들어줘도 된다.

이건 정확히 한 줄만 추가하면 된다.

1
2
3
4
5
if (s[i] == '0' && s[i+1!= '0')
    answer[idx++= '0';
else if (s[i] == '0' && s[i+1== '0'continue;
else
    answer[idx++= '1';
cs

 

 

728x90

+ Recent posts