For Programmer
백준 1316번 파이썬 문제풀이(문자열:그룹 단어 체커) 본문
728x90
n = int(input())
count = 0
for i in range(n):
s = input()
if len(s) == 1: # s가 만약에 한자리면은 무조건 그룹단어이다.
count += 1 #따라서 +1 해준다.
else: #2자리 이상이라면
for j in range(1, len(s)): #2번째 인덱스부터 마지막 인덱스까지
if s[j - 1] == s[j]: #문자 두개씩 비교를 해서 만약 같다면
pass #아무것도 하지않는다.
elif s[j - 1] in s[j:]: #만약 문자 두개가 다르고 앞의 문자가 뒤 문자부터 마지막 인덱스 안에 또 등장한다면
break #반복문을 빠져나간다.
if j == len(s) - 1: #만약 위의 반복문 break없이 다돌고 마지막 인덱스까지 왔다면
count += 1 #count +1 해준다.
print(count)
-> 이문제의 핵심포인트는 in 의사용과 s[j:] 로 새로운 리스트를 만들 수 있냐 없냐에 달려있다. 파이썬이 문자열에 강한이유도 이때문인데 : 를 이용하여 바로 해당인덱스 이후부터의 리스트 범위를 이용할 수 있다는것이 장점이다.
하지만 위 코드는 별로 좋지 못한 코드이다. 왜냐하면 if로 조건을 너무 많이 걸어주어야 하기 때문이다. 따라서 좋은 코드를 하나 소개하고자 한다. 다음은 count함수를 이용 했다.
n = int(input())
count = 0
for j in range(n):
s = input()
error = 0
for j in range(len(s) - 1): # 문자열 마지막 인덱스 앞에까지 반복문 돌기 (두개씩 비교하기 때문)
if s[j] != s[j + 1]: # 두 문자가 다르다면
new_word = s[j + 1:] # 뒤 문자 부터 마지막 인덱스까지 새로운 리스트 만들기
if new_word.count(s[j]) > 0: #새로만들어진 리스트에서 앞의 문자가 존재한다면
error += 1 #에러 값에 +1 해주고
break #바로 반복문을 빠져나간다.
if error == 0: #에러가 0이라면 (문자열이 1글자라도 처리가 가능 초기값을 0으로 세팅했기 때문에)
count += 1 #그룹단어로 추가
print(count)
-> 두 문자가 같지 않을 경우 두번 째 문자부터 마지막 인덱스 까지 새로운 리스트를 만들어 바로 count로 앞의 문자가 또 등장한지 체크 하는 앞서 나온 코드와 비슷한 코드이지만 더 깔끔하다.
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 2292번 파이썬 문제풀이(기본수학 - 벌집) (0) | 2021.09.09 |
---|---|
백준 1712번 파이썬 문제풀이(기본수학 - 손익분기점) (0) | 2021.09.09 |
백준 2941번 파이썬 문제풀이(문자열:크로아티아 알파벳) (0) | 2021.09.08 |
백준 5622번 파이썬 문제풀이(문자열:다이얼) (0) | 2021.09.08 |
백준 2908번 파이썬 문제풀이(문자열:상수) - 파이썬스럽게 문자열 처리 (0) | 2021.09.08 |
Comments