문제풀이/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)