728x90
SW 마에스트로 1차코테 문제집의 두 개 있는 암호 해독 문제 중 첫 번째이다
1차코테인데 어렵겠어? 하고 들어갔다가 1시간을 붙잡고 있는 대참사가 벌어졌었다
문제
문제해석
문제 잘 읽어보기
- 문제 초반에 나와있는 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)
- 문제에서 입력해야 할 암호문과 사전 단어 개수, 사전 단어를 개수대로 입력하는 코드 작성
- 뒤로 한 칸씩 밀면서 확인 할 것이기에 a-z까지 나열해둔 문자열에 a를 붙여 선언한다
- 정답을 담을 변수와 알파벳을 바꿀 때 쓰일 변수도 선언한다
- 임시로 바뀐 암호를 담을 변수를 출력해 한칸씩 뒤로 미룬 변수를 담아본다
- 이를 원래 암호 안에 넣고 사전에서 가져온 단어들에 대조해서 안에 들어있는 지 확인해본다
- 사전 단어와 일치하면 그 시점의 암호문을 answer에 넣는다
- 그 후 반복문을 닫고 나간 후 정답 암호문을 출력한다
실행 및 마무리
정상적으로 출력 되는 모습을 볼 수 있다!
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 |