초기 네이버 기록/알고리즘(C)

백준 8958(C) strlen함수사용

뜨거운 개발자 2023. 1. 3. 23:45
#include<stdio.h>

int main()
{
	int a;
	scanf("%d", &a);
	int count = 0;
	int sum[80] = { 0 };
	char arr[80][80];
	int i = 0;
	while (i < a)
	{
		scanf("%s", arr[i]);
		i++;
	}
	int k = 0;
	int j = 0;
	while (k < i)
	{
		j = 0;
		count = 0;
		while(arr[k][j]== 'X' || arr[k][j] == 'O')
		{
			if (arr[k][j] == 'O')
				count++;
			else if(arr[k][j]== 'X')
				count = 0;
			sum[k] += count;
			j++;
		}
		printf("%d\n", sum[k]);
		k++;
	}
}

이게 처음 코드이다. 아니 진짜 뭐가 문제지,, 구글링 해보니까 2차원 배열의 크기와 상관 없이 계속 덮어 쓰던데 그방법으로 한번 다시 해봐야겠다.,

#include<stdio.h>
#include<string.h>
int main()
{
	int a;
	scanf("%d", &a);
	int count = 0;
	int sum = 0;
	char arr[80];
	
	int k = 0;
	int j = 0;
	while (k < a)
	{
		j = 0;
		count = 0;
		scanf("%s", arr);
		while(j<strlen(arr))
		{
			if (arr[j] == 'O')
				count++;
			else if(arr[j]== 'X')
				count = 0;
			sum += count;
			j++;
		}
		printf("%d\n", sum);
		sum = 0;
		k++;
	}
}

결국에는 이 방법으로 해결하긴 했지만 틀린 이유를 객관적으로 분석해보자면 일단 배열의 길이가 한정돼있다는점 그리고 이렇게 풀면 테스트케이스 1개당 1개씩 출력된다 백준이 바라는 방식이 그냥 한개당 하나씩 출력이었다면 나는 맞을수 없는게 당연함 문제 조건이 틀렸으니까 아무튼 이렇게 해결 됐고 string.h에 있는 strlen함수에 대해서 알았다.

 

--이 글은 2022. 3. 2. 10:04에 쓰여진 글로 코딩 꼬꼬마의 기록을 보존하기 위해 옮겨진 글입니다.

 

728x90