[BOJ_step_07] 문자열 07 ~ 10

2 분 소요

문자열

문자열을 다루는 문제들을 해결해 보자.

상수(2908)

2908

문제풀이

주어지는 세 자리 숫자를 문자열로 입력받아 각 자릿 수에 대한 연산을 거꾸로 하여 두 수 a, b중 큰 수를 출력한다.

void solution_2908()
{
	char Num[2][4];
	int a = 0, b = 0, c = 1;
	scanf("%s", Num[0]);
	scanf("%s", Num[1]);
	for (int i = 0; i < 3; i++) {
		a += c * (Num[0][i] - 48);
		b += c * (Num[1][i] - 48);
		c *= 10;
	}
	printf("%d", a > b ? a : b);
}

다이얼(5622)

2941

문제풀이

A를 0 이라고 생각하고 ABC는 모두 1 + 2의 값(다이얼 2 부분은 3초이다)을 가져야 한다. 다이얼 8 전 까지는 모두 3개씩 가지고 있으므로 else t = (S[i] - 65) / 3 + 3;이와 같이 계산 해주고 나머지 부분을 원하는 초 만큼 계산해주면 된다.

void solution_5622()
{
	char S[16];
	int Time = 0;
	scanf("%s", S);
	int i = 0;
	while (S[i]) {
		int t;
		if (S[i] >= 'P'&&S[i] <= 'S') t = 8;
		else if (S[i] >= 'T'&&S[i] <= 'V')t = 9;
		else if (S[i] >= 'W'&&S[i] <= 'Z')t = 10;
		else t = (S[i] - 65) / 3 + 3;
		Time += t;
		i++;
	}
	printf("%d", Time);
}

크로아티아 알파벳(2941)

2941

문제풀이

규칙에 맞는 문자열을 저장해놓고 주어진 문자열에서 해당 문자를 찾는 문제다.

int Search_2941(char *a, char *b) {
	int cnt = 0, i = 0;
	while (1) {
		if (!b[i]) return cnt;
		if (a[i] != b[i]) return 0;
		if (b[i] && a[i] == b[i]) {
			i++;
			cnt++;
		}
	}
}
void solution_2941()
{
	char S[101];
	char CroatiaAp[8][4] = {
		{'c','='}, {'c','-'}, {'d','z','='}, {'d','-'},
		{'l','j'}, {'n','j'}, {'s','='}, {'z','='}
	};
	scanf("%s", S);
	int i = 0, answer = 0;
	while (S[i]) {
		int n = 0;
		for (int k = 0; k < 8; k++) {
			n = Search_2941(&S[i], CroatiaAp[k]);
			if (n > 0) {
				answer++;
				i += n;
				break;
			}
		}
		if (n == 0) {
			answer++;
			i++;
		}
	}
	printf("%d\n", answer);
}

그룹단어 체커(1316)

1316

문제풀이

문자열 중에서 한 번 이상 나왔던 문자가 다른 문자가 나온 후 또 나오는지 안나오는지 확인하는 문제다.

void solution_1316()
{
	int N, Cnt = 0;
	char S[101];
	bool Check[26];
	memset(Check, 26, 0);

	scanf("%d", &N);
	while (N--) {
		int i = 0;
		for (int j = 0; j < 26; j++) Check[j] = false;
		scanf("%s", S);
		while (S[i]) {
			int n = S[i] - 97;
			if (Check[n] && S[i] != S[i - 1])break;
			if (!Check[n]) Check[n] = true;
			i++;
		}
		if (S[i] == '\0')Cnt++;
	}
	printf("%d\n", Cnt);
}

댓글남기기