🥕 [ 백준 1316 ] 그룹 단어 체커
문제 링크
url : https://www.acmicpc.net/problem/1316
🍒 문제 분석
aabbc 등과 같이 같은 알파벳끼리 모여있는 걸 그룹 단어 라고 합니다.
문제에서 주어진 문자열 중에 그룹단어인 것의 갯수를 세면 됩니다.
aabbca 는 그룹 단어가 아닙니다.
🥑 코드
T = int(input()) # 문자열 갯수 입력 받음
cnt = 0
for _ in range(T):
N = input() # 문자열 입력 받음
mylist =[]
idx = 0
for i in N:
if idx == 0 : # 첫번째 문자를 mylist에 넣고
mylist.append(i)
idx += 1
if i == mylist[idx-1]: # 이후부터 이전에 넣은 문자와 같은지 여부 체크
continue # 같으면 패스
elif i in mylist: # 같지 않고, 이전에 mylist에 넣은 문자열 중에 있다면
break # 그룹 문자가 아니므로 다음 문자열로 넘긴다.
elif i != mylist[idx-1]: # 이전에 넣은 무자열과 같지 않고, mylist에 없는 문자라면 mylist에 추가
mylist.append(i)
idx += 1
else :
cnt += 1 # 정상적으로 문자열을 다 돌고나면, 그룹문자이므로 카운트 +1
print(cnt) # 카운트 출력
🍓 해결 과정 & 깨달은 점
내 코드를 해석하자면 다음과 같다.
1. my list를 만든다.
2. 이전 문자를 mylist에 넣고
3. 현재 문자와 이전 문자를 비교하여
i) 같으면 패스
ii) 다른데, mylist에 있는거면 그룹 문자 아님
iii) 다른데, mylist에 없으면 mylist에 넣음
4. 다시 이전 문자와 바로 그 다음 문자를 비교한다.
5. for문이 끝나면, 그룹 문자인 것이므로 카운트가 하나 추가 된다.
🌽 다른 사람 코드
이후 다른 사람의 코드를 검색해보았는데 다음과 같았다.
x = int(input())
count = 0
for i in range(0,x):
y = input()
if len(y) == 1:
count += 1
elif len(y) == 2:
count += 1
else:
for j in range(0,len(y)-1):
if y[j] != y[j+1]:
if y.count(y[j],j+1) > 0:
break
if j == (len(y)-2):
count += 1
break
print(count)
1. 문자열의 길이가 1이면 그룹문자
2. 문자열의 길이가 2이면 그룹문자
3. 문자열의 길이가 3이상일 때,
i) 현재 문자와 다음 문자를 간단히 인덱스로 접근하여 비교하였다.
ii) y.count(y[j],j+1) 하면, 인덱스 j+1 부터 보았을 때 y[j]의 갯수가 몇개인지를 의미한다.
y[j]가 y[j+1]과 다른 상태에서 y[j]가 또 있다는 것은 그룹단어가 아니라는 뜻이므로 break 한다.
iii) for문을 다 돌면 count를 +1 한다.
🍉 깨달은 점 및 정리
리스트를 하나 더 만들어서, 일일히 저장해가며 하는 것 보다
1. 인덱스로 접근하여 현재 문자와 다음 문자를 비교하는게 더 깔끔해보였다.
2. count 함수를 이용해 현재 문자 뒤에 동일한 문자가 또 나오는지 세는것도 in 을 통해 문자열 매번 돌리는 것 보다 더 효율적으로 보였다.
count = 0
for idx, item in enumerate(s[:-1]):
if item != s[idx+1]:
if s.count(item,idx+1) > 0:
break
else: count += 1
🍨 최종 수정해서 제출한 코드
T = int(input())
count = 0
for _ in range(T):
s = input()
if len(s)==1:
count += 1
continue
elif len(s) == 2:
count += 1
continue
for idx, item in enumerate(s[:-1]):
if item != s[idx+1]:
if s.count(item,idx+1) > 0:
break
else: count += 1
print(count)
'코딩테스트 > 백준 단계별' 카테고리의 다른 글
[백준 7단계] 2775 부녀회장이 될테야 (중요) (0) | 2022.05.13 |
---|---|
[ 백준 7단계 ] 10250 ACM 호텔 (0) | 2022.05.13 |
[ 백준 7단계 ] 2869 달팽이는 올라가고 싶다. (0) | 2022.05.13 |
[백준 7단계] 1193 분수찾기 (군수열) (0) | 2022.05.12 |
[백준 7단계] 2292 벌집 (0) | 2022.05.12 |