본문 바로가기
백준 C언어/silver

백준 5555 반지 C언어_230108

by boyo-ee 2023. 1. 13.

생각보다 문자열을 이용한 문제는 쉽게 풀린다.

하지만 문자열을 이용해 풀 수 있는 함수의 종류를 좀 머릿속에 기억하고 있어야 한다.

물론 그때그때 찾아볼 수 있지만 시간을 아끼기 위해선 조금 익숙해질 필요가 있으며, 막상 문제를 풀다 보니 쓰는 함수만 쓰고 있다. 🤣

 

처음에는 막연하게 당연히 루프를 돌리고 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값을 출력한다.

 

막상 구현하고 보니 상당히 간단한 방법으로 구현이 가능하다.

뭔가 혼자 힘으로 문제를 풀고 나니 상당히 뿌듯하다.

댓글