생각보다 문자열을 이용한 문제는 쉽게 풀린다.
하지만 문자열을 이용해 풀 수 있는 함수의 종류를 좀 머릿속에 기억하고 있어야 한다.
물론 그때그때 찾아볼 수 있지만 시간을 아끼기 위해선 조금 익숙해질 필요가 있으며, 막상 문제를 풀다 보니 쓰는 함수만 쓰고 있다. 🤣
처음에는 막연하게 당연히 루프를 돌리고 tmp에 값을 복사하고 값을 하나씩 옮겨서 풀어야겠다고 생각했다.
그래서 실제로 구현도 하려고 코드를 짜다가...... 갑자기 마주친 벽에 다른 방법을 고민했다.
이 문제의 핵심은 반지라는 것이다.
반지는 처음과 끝이 연결된다. 반지는 처음과 끝이 연결된다. 반지는~~~ 이런 식으로 말이다.
String.h header에는 다음과 같이 문자열을 이용한 함수들이 들어있다.
strlen 문자열 길이
strcpy 문자열 복사
strstr 문자열 검색 (포인터를 반환한다.)
#include <stdio.h>
#include <string.h>
int main(){
char a[101];
int n,sum=0,cnt;
char b[101][101],c[101];
char *p;
scanf("%s",a);
scanf("%d",&n);
int len=strlen(a);
for(int i=0;i<n;i++){
scanf("%s",b[i]);
strcpy(c,b[i]);
strcat(c,b[i]);
p=strstr(c,a);
if(p!=NULL) cnt=1;
else cnt=0;
sum+=cnt;
}
printf("%d",sum);
return 0;
}
사실 아직 포인터는 익숙지 않지만 해당 함수를 받아와 포인터 값이 null이 아니라면(즉, 해당 위치가 들어있다면) cnt값을 1 늘린다.
이 작업을 n번 수행하고 sum값을 출력한다.
막상 구현하고 보니 상당히 간단한 방법으로 구현이 가능하다.
뭔가 혼자 힘으로 문제를 풀고 나니 상당히 뿌듯하다.
'백준 C언어 > silver' 카테고리의 다른 글
백준 2578 빙고 C언어_230117 (0) | 2023.01.18 |
---|---|
백준 1978 소수찾기 C언어_230113 (0) | 2023.01.13 |
백준 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 C언어_230110 (0) | 2023.01.13 |
백준 1065 한수 C언어_230113 (2) | 2023.01.13 |
백준 1436 영화감독 숌 C언어_230108 (0) | 2023.01.13 |
댓글