Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그램으로 특정 문자가 N번째로 나타난 이후의 문자열 출력하기

이 문제의 목표는 사용자가 지정한 문자가 주어진 횟수만큼 나타난 이후 부분의 문자열을 출력하는 것입니다.

입력 및 출력 예시

입력 : string = {"I am harsh vaid"}
     Char = 'a'
     Count = 2
출력 : rsh vaid

사용자가 문자 'a'와 출현 횟수 2를 지정했으므로, 'a'가 두 번째로 나타난 위치 바로 뒤부터 남은 문자열을 출력하면 됩니다. 위 예시에서 'a'는 "am"의 'a'와 "harsh"의 첫 번째 'a'로 두 번 등장하며, 그 이후인 "rsh vaid"가 최종 출력됩니다.

알고리즘

START
Step 1 -> 문자 ch(예: 'a')와 정수 count(예: 2)를 입력받는다
Step 2 -> sizeof(string)/sizeof(string[0]) 로 문자열 길이 n을 계산하여 초기화한다
Step 3 -> i를 0부터 n까지 반복한다
     IF count > 0
        IF string[i] == ch
           count = count - 1
        END IF
        continue
     ELSE
        string[i] 출력
     END ELSE
Step 4 -> 반복 종료
STOP

예제 코드

#include <stdio.h>
int main(int argc, char const *argv[]) {
    char string[] = {"I am Harsh Vaid"};
    char ch = 'a';
    int i, count = 2;
    int n = sizeof(string)/sizeof(string[0]);
    for( i = 0; i < n; i++ ) {
        if(count>0) {
            if(string[i]==ch) {
                count--;
            }
            continue;
        }
        else
        printf("%c", string[i]);
    }
    return 0;
}

코드 동작 원리

프로그램은 문자열을 처음부터 한 글자씩 순회하면서 다음과 같이 동작합니다.

1단계: count 값이 아직 0보다 클 때는 현재 문자가 지정한 문자(ch)와 일치하는지 검사합니다. 일치하면 count를 하나 감소시키고, 어떤 경우든 continue로 인해 해당 문자는 출력되지 않고 건너뜁니다.

2단계: count가 0이 되면, 즉 지정한 문자가 요청한 횟수만큼 모두 발견된 이후에는 조건문의 else 분기로 넘어가 나머지 문자들을 그대로 화면에 출력합니다.

이 방식은 별도의 버퍼나 추가 메모리 없이 O(n) 시간 복잡도로 문제를 해결할 수 있다는 장점이 있습니다.

실행 결과

위 프로그램을 컴파일 후 실행하면 다음과 같은 결과가 출력됩니다.

rsh Vaid

'a'가 두 번째로 나타난 지점 이후의 문자열만 정확히 출력되는 것을 확인할 수 있습니다. count 값을 변경하거나 다른 문자를 지정하면 같은 로직으로 다양한 조건의 결과를 얻을 수 있습니다.