[알고리즘/파이썬] 백준 2607번 - 비슷한 단어
2020. 9. 1. 22:34ㆍ개발/알고리즘
2607번: 비슷한 단어
첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이��
www.acmicpc.net
문제 이해하는데 한참 걸렸다. 책좀 더 읽어야겠다.
아래 코드처럼 모든경우의 수를 다 확인하는 방법으로 풀었다.
입력은 대문자만 된다고 했으니 대문자 32개를 입력받을수 있도록 했다. ( length가 32인 list에 0으로 초기화 )
대문자는 아스키코드 65부터 시작하니까 입력받은 문자를 65로 나눈 나머지가 0이면 A, 나머지가 1이면 B 이런식으로 처리했다.
그후 구성이 같은지, 문자를 하나 뺐을때 같은지, 문자를 하나 더했을때 같은지, 기존 문자 하나를 다른 문자로 바꿨을때 같은지 확인하면 된다. 이중 하나라도 걸리면 비슷한 문자다.
n = int(input())
words= []
for _ in range(n):
word = input()
words.append(word)
first_word = [0 for i in range(32)]
ans = 0
for i in range(len(words)):
word = [0 for j in range(32)]
# 첫번째 단어
if i ==0 :
for c in words[i]:
first_word[ord(c)%65] += 1
# 두번째 단어
else:
for c in words[i]:
word[ord(c)%65] += 1
# 같은구성
if ''.join(str(word)) == ''.join(str(first_word)):
ans +=1
continue;
# 기존 문자를 빼는경우
for j in range(32):
if word[j] >=1:
word[j] -= 1
if ''.join(str(word)) == ''.join(str(first_word)):
ans +=1
continue
word[j] +=1
# 새로운 문자 하나를 추가 하는 경우
for j in range(32):
word[j] += 1
if ''.join(str(word)) == ''.join(str(first_word)):
ans +=1
continue
word[j] -=1
# 기존 문자 하나를 바꾸는 경우
for j in range(32):
if word[j] >= 1:
# 기존문자 하나 제거
word[j] -= 1
# 다른문자로 대체
for k in range(32):
if k != j:
word[k] +=1
if ''.join(str(word)) == ''.join(str(first_word)):
ans +=1
continue
word[k] -=1
word[j] +=1
print(ans)
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘/자바] 백준 17298번 - 오큰수 (0) | 2020.12.27 |
---|---|
[알고리즘/파이썬] 백준 2609번 - 최대공약수와 최소공배수 (0) | 2020.09.06 |
[알고리즘/파이썬] 백준 11053번 - 가장 긴 증가하는 부분 수열 (0) | 2020.07.27 |
[알고리즘/자바] 프로그래머스 - 베스트 앨범 (0) | 2020.07.21 |
[알고리즘/자바] 프로그래머스 - 프린터 (0) | 2020.07.20 |