이 문제의 목표는 사용자가 지정한 문자가 주어진 횟수만큼 나타난 이후 부분의 문자열을 출력하는 것입니다.
입력 및 출력 예시
입력 : 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 값을 변경하거나 다른 문자를 지정하면 같은 로직으로 다양한 조건의 결과를 얻을 수 있습니다.