문제
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
mode가 0일 때
code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
mode가 1일 때
code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
솔루션
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* code) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer = (char*)malloc(strlen(code));
int i = 0;
int j = 0;
int cnt = 0;
for(i = 0; i < strlen(code); i++){
if(code[i] == '1'){
cnt++;
continue;
}
if(cnt % 2 == 0 && i % 2 == 0)
answer[j++] = code[i];
if(cnt % 2 != 0 && i % 2 != 0)
answer[j++] = code[i];
}
if(j == 0)
return "EMPTY";
answer[j] = '\0';
return answer;
}
12,13케이스에서 막혔는데
질문하기를 보니까 많은 사람들이 12, 13케이스에서 막힌 것을 확인할 수 있었고
댓글에서 도움을 얻어 문제를 다시 한번 확인했더니
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
라는 조건이 있었다
해당 조건에 따르면 "1"이 주어졌을 때 "EMPTY"라는 결과 값이 나와야 한다
따라서
if(j == 0)
return "EMPTY";
라는 코드를 추가하였다
https://school.programmers.co.kr/learn/courses/30/lessons/181932#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'프로그래머스코딩테스트연습풀이 > C언어' 카테고리의 다른 글
[프로그래머스/C언어] 주사위 게임 2 (0) | 2023.08.04 |
---|---|
[프로그래머스/C언어] 등차수열의 특정한 항만 더하기 (0) | 2023.08.04 |
[프로그래머스/C언어] 분수의 덧셈 (0) | 2023.08.04 |
[프로그래머스/C언어] 배열 두배 만들기 (0) | 2023.08.04 |
[프로그래머스/C언어] 피자 나눠 먹기 (2) (0) | 2023.08.04 |