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

2023. 2. 11. 23:29·Coding Test/BaekJoon_Python
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
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > BaekJoon_Python' 카테고리의 다른 글

BaekJoon - 2667번: 단지번호붙이기 (그래프, 탐색)  (0) 2023.02.15
BaekJoon - 6550번: 부분 문자열 (문자열, 그리디 알고리즘)  (0) 2023.02.12
BaekJoon - 5597번: 과제 안 내신 분..? (1차원 배열, PYTHON)  (1) 2022.11.01
BaekJoon - 10807번: 개수 세기 (1차원 배열, PYTHON)  (0) 2022.11.01
BaekJoon - 10809번: 알파벳 찾기 (문자열, PYTHON)  (0) 2022.11.01
'Coding Test/BaekJoon_Python' 카테고리의 다른 글
  • BaekJoon - 2667번: 단지번호붙이기 (그래프, 탐색)
  • BaekJoon - 6550번: 부분 문자열 (문자열, 그리디 알고리즘)
  • BaekJoon - 5597번: 과제 안 내신 분..? (1차원 배열, PYTHON)
  • BaekJoon - 10807번: 개수 세기 (1차원 배열, PYTHON)
ThreeLight
ThreeLight
ThreeLight Studio의 블로그, TimeMap.exe에 오신 것을 환영합니다.
  • ThreeLight
    TimeMap.exe
    ThreeLight
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Checkpoint (1)
      • (3D)Dev Deep Dive (0)
        • Templates & Guides (9)
        • Frontend origin (9)
        • Backend origin (1)
        • TroubleShootings (4)
      • Development Study (95)
        • Frontend (36)
        • Backend (21)
        • CS(Computer Science) (2)
        • Background Knowledges (11)
        • Algorithm (2)
        • Mobile (3)
        • AWS (6)
        • Python (6)
        • MSW(MapleStoryWorlds) (8)
      • Coding Test (59)
        • 문제.zip (1)
        • BaekJoon_JavaScript (0)
        • Programmers_JavaScript (9)
        • BaekJoon_Python (23)
        • Programmers_Python (10)
        • Undefined_Python (3)
        • Programmers_SQL (13)
      • 활동내역.zip (43)
        • 개인 (21)
        • Techeer (12)
        • Bootcamp (7)
        • Hackathon (1)
        • TeamProjects (2)
      • 여기 괜찮네??(사이트 | App) (5)
      • 재미있는 주제들 (8)
      • 개발 외 공부 저장소 (11)
        • 생산운영관리 (3)
        • 생활속의금융 (6)
        • 경영정보시스템 (2)
  • 링크

    • TimeMap.dmg (Portfolio)
    • GitHub 바로가기
    • 오픈프로필(카카오톡)
    • Medium 바로가기
    • Disquiet 바로가기
    • LinkedIn 바로가기
  • 인기 글

  • 태그

    Python
    TypeScript
    HTML
    react
    programmers
    CSS
    Baek Joon
    SQL
    JavaScript
    프로그래머스
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
ThreeLight
BaekJoon - 14584번: 암호 해독 (문자열, 브루트포스 알고리즘)
상단으로

티스토리툴바