C언어 관련 문제

#pragma warning(disable:4996)

#include <stdio.h>

int Check(char);

int main() {
	int N;
	int i;
	char ch;
	int arr[100] = {0};
	int count_big = 0;
	int count_small = 0;
	int count_number = 0;

	scanf("%d", &N);
	getchar();

	for (i = 0; i < 100; i++) {
		arr[i] = 3;
	}

	for (i = 0; i < N; i++) {
		scanf("%c", &ch);
		arr[i] = Check(ch);
	}
	for (i = 0; i < N; i++) {
		printf("%d", arr[i]);
	}

	for (i = 0; i < N; i++) {
		if (N % 2 == 0) { //N이 짝수일 때
			if (arr[i] == 0) {
				if (arr[i] == arr[i + 1]) {
					count_big++;
				}
			}
			else if (arr[i] == 1) {
				if (arr[i] == arr[i + 1]) {
					count_small++;
				}
			}
			else {
				if (arr[i] == arr[i + 1]) {
					count_number++;
				}
			}
		}
		else { // N이 홀수일 때
			if (arr[i] == 0) {
				if (arr[i] == arr[i + 1]) {
					if (count_big == 0) {
						count_big = count_big + 2;
					}
					else {
						count_big++;
					}
				}
			}
			else if (arr[i] == 1) {
				if (arr[i] == arr[i + 1]) {
					if (count_small == 0) {
						count_small = count_small + 2;
					}
					else {
						count_small++;
					}
				}
			}
			else {
				if (arr[i] == arr[i + 1]) {
					if (count_number == 0) {
						count_number = count_number + 2;
					}
					else {
						count_number++;
					}
				}
			}
		}
		
	}

	printf("\n\n%d\n\n", count_big);
	printf("%d\n\n", count_small);
	printf("%d\n\n", count_number);

	return 0;
}



int Check(char ch) {
	if (ch >= 'A' && ch <= 'Z') {
		return 0;
	}
	else if (ch >= 'a' && ch <= 'z') {
		return 1;
	}
	else {
		return 2;
	}
}

조금만 더 고치면 될 거 같은데 계속 안되네요… 도와주세요

안녕하세요.

뭐가 안되나용???

#include <iostream>
#include <algorithm>

int Check(char ch) {
	if (ch >= 'A' && ch <= 'Z') return 0;
	else if (ch >= 'a' && ch <= 'z') return 1;
	else return 2;
}

int main() {
	int num = 0, curr = -1, last = -1, curr_freq = 0, max_freq[3] = { 0 };
	char str[100];

	scanf("%d", &num);
	scanf("%s", str);

	for (int i = 0; i < num; ++i) {
		curr = Check(str[i]);

		if (last == curr)
			++curr_freq;
		else 
			curr_freq = 1;
		
		max_freq[curr] = std::max(max_freq[curr], curr_freq);
		last = curr;
	}

	for (int i = 0; i < 3; ++i) 
		printf("%d ", max_freq[i]);
}

머 대강 이렇게 짜면 될듯 싶네유

안녕하세요~ 재밌는 문제같네요. 우선 코드 되게 잘 짜셨네요 근데 위 문제 테스트 케이스에서 aAAAAbA910 을 입력하게되면
count_big = 4, count_small = 1, count_number = 3 이 출력이 되어야 정상적으로 작동 하는거겠죠?

근데 아래의 코드에서

for (i = 0; i < N; i++) {
		if (N % 2 == 0) { //N이 짝수일 때
			if (arr[i] == 0) {
				if (arr[i] == arr[i + 1]) {
					count_big++;
				}
			}
			else if (arr[i] == 1) {
				if (arr[i] == arr[i + 1]) {
					count_small++;
				}
			}
			else {
				if (arr[i] == arr[i + 1]) {
					count_number++;
				}
			}
		}
		else { // N이 홀수일 때
			if (arr[i] == 0) {
				if (arr[i] == arr[i + 1]) {
					if (count_big == 0) {
						count_big = count_big + 2;
					}
					else {
						count_big++;
					}
				}
			}
			else if (arr[i] == 1) {
				if (arr[i] == arr[i + 1]) {
					if (count_small == 0) {
						count_small = count_small + 2;
					}
					else {
						count_small++;
					}
				}
			}
			else {
				if (arr[i] == arr[i + 1]) {
					if (count_number == 0) {
						count_number = count_number + 2;
					}
					else {
						count_number++;
					}
				}
			}
		}
		
	}
if(arr[i] == arr[i]+1)
        count++ 

이런식으로 앞의 인덱스요소와 뒤의 인덱스 요소가 같을때 카운트를 세고 계셔서 모든 카운트가 1씩 모자르게 되네요?

사실 짝수 홀수를 나누신 이유는 잘 모르겠지만 짝수의 경우에서는 위의 오류때문에 big, small, number 모두 1씩 모자르게 출력되네요

위의 로직으로 다시 수정해보시면 정상작동 할 것 같네요 ㅎㅎ

아래는 제가 대충 짜본 코드라 오류가 있을 순 있는데 도움이 되셨으면 좋겠습니다
저도 잘하는 사람은 아니여서 실수하신걸 정확히 집은진 모르겠네요 ㅠ

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

enum {
	EXIT = -3, NULL_VALUE = -2, INITIAL_VALUE = -1, CAPITAL_LETTER = 0,
	SAMLL_LETTER = 1, NUMBER_LETTER = 2,
};

typedef struct retCheck {
	unsigned int ar[3];
	unsigned int temp;
}retCheck;

void Counting(int status, retCheck* retcheck);
void Init(retCheck* check);
int f_gets(char str[], int size);
void Remove_Buffer();
int Check(char ch);

int main() {

	int strLen = 0;
	int N = 0;
	int status = 0;
	scanf_s("%d", &N);
	Remove_Buffer();

	char* buf = (char*)malloc(sizeof(char) * (N+1));
	if (buf == NULL)
		return -1;

	strLen = f_gets(buf, N+1);
	
	retCheck* retcheck = NULL;
	retcheck = (retCheck*)malloc(sizeof(retCheck));
	if (retcheck == NULL)
		return -1;

	Init(retcheck);

	for (int i = 0; i < strLen; i++) {
		status = Check(buf[i]);
		switch (status) {
		case CAPITAL_LETTER:	Counting(status, retcheck); break;
		case SAMLL_LETTER:		Counting(status, retcheck); break;
		case NUMBER_LETTER:		Counting(status, retcheck); break;
		}
	}



	printf("CAPITAL_LETTER:%d\nSAMLL_LETTER:%d\nNUMBER_LETTER:%d\n",
		retcheck->ar[0], retcheck->ar[1], retcheck->ar[2]);
}

void Counting(int status, retCheck* retcheck) {
	
	static int IsPrevious = INITIAL_VALUE;


	if (status == NULL_VALUE)
		if (retcheck->ar[IsPrevious] < retcheck->temp) {
			retcheck->ar[IsPrevious] = retcheck->temp;
			return;
		}

	if (IsPrevious != status) {
		if (retcheck->ar[status] == 0) {
			IsPrevious = status;
			retcheck->temp = 0;
			retcheck->ar[IsPrevious]++;
		}
		else if (retcheck->ar[IsPrevious] < retcheck->temp) {
			retcheck->ar[IsPrevious] = retcheck->temp;
			retcheck->temp = 0;
			IsPrevious = status;
			if (retcheck->ar[IsPrevious] != 0) {
				retcheck->temp++;
			}
			else {
				retcheck->ar[IsPrevious]++;
			}
		}
		else {
			retcheck->temp = 0;
			IsPrevious = status;
			retcheck->temp++;
		}
	}
	else {
		if (retcheck->temp != 0)
			retcheck->temp++;
		else
			retcheck->ar[IsPrevious]++;
	}
}

void Remove_Buffer() {
	while (getchar() != '\n') continue;
}

void Init(retCheck* check) {
	memset(check, 0, sizeof(*check));
}

int f_gets(char str[], int size) {

	char* pstr = NULL;
	fgets(str, size, stdin);

	pstr = str;
	while (*pstr && *pstr != '\n') {
		pstr++;
	}
	if (*pstr == '\n')*pstr = '\0';
	else
		Remove_Buffer();
	return pstr - str;
}

int Check(char ch) {
	if (ch >= 'a' && ch <= 'z')
		return SAMLL_LETTER;
	else if (ch >= 'A' && ch <= 'Z')
		return CAPITAL_LETTER;
	else if (ch >= '0' && ch <= '9')
		return NUMBER_LETTER;
	else if( ch == '\0') return -2;

	return EXIT;
	
}

#pragma warning(disable:4996)
#include <stdio.h>

이 외에는 쓰면 안되고, 처음 보는 거라 이해가 안되지만… 너무 고생하셨어요. 감사합니다!!

#pragma warning(disable:4996)
#include <stdio.h>

이 외에는 쓰면 안되고, 처음 보는 거지만 감사합니다.

max 함수때문에 그렇게 한겁니다.
직접 구현해서 사용하면 됩니다.

보시면 아시겠지만 특별한 건 없습니다.