문제풀이/BOJ
[Python] BOJ/백준 2596번 비밀편지
서채리
2021. 6. 13. 01:33
[문제]
https://www.acmicpc.net/problem/2596
2596번: 비밀편지
병현이는 지은이에게 문자 A, B, C, D, E, F, G, H 로 쓰여진 편지를 날마다 보내는데, 컴퓨터로 보내는 비밀편지로, 한 문자마다 0 또는 1인 숫자 여섯 개를 사용하여 보낸다. 둘 사이의 약속은 다음과
www.acmicpc.net
[풀이]
병현이가 보낸 문자를 6자씩 끊어 리스트 s_li에 저장하고 둘 사이의 약속은 리스트 promise에 저장한다.
3중 중첩 반복문으로 병현이가 보낸 문자 s_li를 기준으로 두고 promise와 차례대로 한 문자씩 비교하면서 각 자리의 문자가 일치할 경우 cnt가 1 증가한다.
병현이가 문자를 제대로 보냈을 경우와 한 자만 틀렸을 경우(cnt >= 5)에는 해당 문자를 초기화한 correct 문자열에 추가해주었다. 만약 기준 s_li 요소와 promise의 모든 요소를 비교했을 때 다 두 자 이상 틀렸을 경우 (incorrect == len(promise)) 해당 문자의 index+1을 반환하고 종료한다.
[코드]
if __name__ == '__main__':
n = int(input())
s = input()
s_li = []
for i in range(0, n * 6, 6):
s_li.append(s[i: i + 6])
promise = ['000000', '001111', '010011', '011100', '100110', '101001', '110101', '111010']
correct = ''
incorrect = 0
for i in s_li:
incorrect = 0
for j in promise:
cnt = 0 # 맞은 개수
for k in range(6):
if i[k] == j[k]:
cnt += 1
if cnt >= 5: # 똑같거나 한 자만 다른 경우
correct += chr(promise.index(j) + 65)
break
else: # 두 자 이상 다른 경우
incorrect += 1
if incorrect == len(promise):
print(s_li.index(i) + 1)
quit()
print(correct)