문제
https://www.acmicpc.net/problem/1316
걸린 시간
00 : 21 : 19
풀이
Python3
def overlap(history, cnt):
for i in history:
if cnt == i:
return True
return False
if __name__ == "__main__":
# 단어의 개수
N = int(input())
# 단어 저장 리스트
word = []
# 출현한 문자 저장 리스트
history = []
# 단어 입력
for i in range(0, N):
word.append(input())
# 결과 단어 개수
result = 0
# 그룹 단어 체크
for i in word:
last = ''
history.clear()
flag = True
for j in i:
cnt = j
# 이전에 단어와 같은 단어인가 비교
if last != cnt:
# 중복되는지 체크
if overlap(history, cnt):
flag = False
else:
history.append(cnt)
last = cnt
if flag == True:
result += 1
print(result)
C++
#include <stdio.h>
#include <iostream>
#include <string>
#include <string.h> // memset
using namespace std;
int alphabet[26];
bool groupWord(string word){
char s = word[0];
alphabet[(int)s%97] = 1;
for(int i = 1; i < word.size(); i++){
if(s != word[i]){
s = word[i];
// 이미 등장했던 알파벳이면
if(alphabet[(int)s%97])
return false;
alphabet[(int)s%97] = 1;
}
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int N, count = 0;
cin >> N;
for(int i = 0; i < N; i++){
memset(alphabet, 0, sizeof(alphabet));
string word;
cin >> word;
if(groupWord(word))
count++;
}
cout << count << "\n";
return 0;
}
등장한 알파벳을 배열에 저장해두고 새로운 값이 나올 때 마다 모두 꺼내어 비교했던 Python 풀이와는 다르게 0, 1로 등장 여부를 체크할 수 있는 26크기의 배열을 두어 그룹 단어인지를 체크한다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 7568번 덩치 (0) | 2020.07.22 |
---|---|
Baekjoon 2941번 크로아티아 알파벳 (0) | 2020.07.21 |
Baekjoon 4949번 균형잡힌 세상 (0) | 2020.07.21 |
Baekjoon 11866번 요세푸스 문제 0 (0) | 2020.07.21 |
Baekjoon 1966번 프린터 큐 (0) | 2020.07.20 |
댓글