Coding Test/BaekJoon_Python

BaekJoon - 14584번: 암호 해독 (문자열, 브루트포스 알고리즘)

  • -
728x90

SW 마에스트로 1차코테 문제집의 두 개 있는 암호 해독 문제 중 첫 번째이다

1차코테인데 어렵겠어? 하고 들어갔다가 1시간을 붙잡고 있는 대참사가 벌어졌었다


문제

 

14584번: 암호 해독

로마의 장군 카이사르는 로마군의 작전을 적이 모르게 하기 위하여 암호를 사용했다. 카이사르는 다음과 같이 문장에 있는 모든 알파벳 글자를 몇 칸 뒤의 알파벳으로 바꾸는 방식으로 암호를

www.acmicpc.net


문제해석

문제 잘 읽어보기

  • 문제 초반에 나와있는 17칸 뒤를 믿지 말 것
  • 당신은 카이사르가 어떤 방법으로 문장을 암호화하는지는 알고 있지만 카이사르가 몇 칸 뒤의 알파벳으로 바꾸는지는 모른다.
  • -> 결론은 알파벳을 하나씩 뒤로 밀어보면서 대조 해보아야 한다
  • N개의 사전 단어 중 하나라도 들어가 있다면 조건 충족으로 이를 출력한다

코드 작성

secret = str(input())
N = int(input())
diction = []
for i in range(N):
    diction.append(str(input()))

alpha = 'abcdefghijklmnopqrstuvwxyza'
index = 0
answer = ''
while True:
    new_secret = ''
    for i in secret:
        index = alpha.find(i)
        new_secret += alpha[index + 1]
        secret = new_secret

    for d in diction:
        if d in secret:
            answer = secret

    if len(answer):
        break

print(answer)
  1. 문제에서 입력해야 할 암호문과 사전 단어 개수, 사전 단어를 개수대로 입력하는 코드 작성
  2. 뒤로 한 칸씩 밀면서 확인 할 것이기에 a-z까지 나열해둔 문자열에 a를 붙여 선언한다
  3. 정답을 담을 변수와 알파벳을 바꿀 때 쓰일 변수도 선언한다
  4. 임시로 바뀐 암호를 담을 변수를 출력해 한칸씩 뒤로 미룬 변수를 담아본다
  5. 이를 원래 암호 안에 넣고 사전에서 가져온 단어들에 대조해서 안에 들어있는 지 확인해본다
  6. 사전 단어와 일치하면 그 시점의 암호문을 answer에 넣는다
  7. 그 후 반복문을 닫고 나간 후 정답 암호문을 출력한다

실행 및 마무리

정상적으로 출력 되는 모습을 볼 수 있다!


End

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.