알고리즘/백준 알고리즘

[백준] 1316-그룹단어 체커

TIM_0529 2022. 12. 29. 07:31
반응형
#include <iostream>
#include <bits/stdc++.h>
using namespace std;


int main() {
	int repeat = 0;
	int repeatingword=0;
	char word[105];
	bool issame;
	cin >> repeat;
	repeatingword = repeat;
	while (repeat > 0)
	{
		cin >> word;
		for (int i = 0; i < strlen(word); i++)
		{
			issame = false;
			for (int j = i+2; j < strlen(word); j++)
			{
				if (word[i] == word[j] && word[i] != word[j - 1]) {
					issame = true;
				}
				
			}
			if (issame == true)
				break;
		}
		if (issame) {
			repeatingword--;
		}
		
		repeat--;
	}
	cout << repeatingword << endl;
}

C++ 을 사용해서 2020에 데이터를 차지합니다.

 

풀이법은 

2중 for 문을 돌면서 지금 찾고 있는 글자  i 보다 두 칸 더 앞으로 가서 j 부터 2중 포문을 실행합니다.

 만약 i 번 째 글자와 j  번 째 글자가 같다면 조건을 걸어서 만약, j-1 번 째와 i 번째 가 다르다면  그룹단어가 아니므로 전체에서 제외하게 만들었습니다.

 

다른사람에 풀이법을 보겠습니다.

#include <stdio.h>

int main(){
	int n, ans = 0;
	scanf("%d", &n);
	while(n--){
		char s[101];
		int visit[26] = {0}, i, ck = 0;
		scanf("%s", s);
		for(i = 0; s[i]; i++){
			if(!visit[s[i] - 'a'] || s[i] == s[i - 1]){
				visit[s[i] - 'a'] = 1;
				ck++;
			}
		}
		if(ck == i)
			ans++;
	}
	printf("%d", ans);

c 언어 스타일 대로 작성 하셨고, 빈도수를 체크해서 지금 문자가 있어야 하는 위치 ( 연속해서 나왔다면 맞는위치) 보다 더 높은 i 이상에 위치에 있다면 ans 를 더하지 않고 그렇지 않고 맞는 위치에 있이 반복이 끝났다면 ans++를 해서 반복문자를 찾는 방법으로 작성 하셨습니다. 

메모리는 1112kb 사용하셨습니다.

반응형

'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

[백준] 2292 - 벌집  (2) 2022.12.30
[백준] 1712 - 손익분기점  (0) 2022.12.30
[백준] 2941 - 크로아티아 알파벳  (2) 2022.12.29
[백준] 5622 - 다이얼  (0) 2022.12.29
[백준] 5622 - 다이얼  (0) 2022.12.29