일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 캐치카페
- 데이콘
- Baekjoon
- AI 경진대회
- SW Expert Academy
- gs25
- leetcode
- Git
- 맥북
- 백준
- 자연어처리
- ChatGPT
- 더현대서울 맛집
- 코로나19
- hackerrank
- PYTHON
- 금융문자분석경진대회
- 편스토랑
- 편스토랑 우승상품
- 우분투
- Real or Not? NLP with Disaster Tweets
- dacon
- ubuntu
- Kaggle
- programmers
- 프로그래머스 파이썬
- 파이썬
- github
- Docker
- 프로그래머스
- Today
- Total
솜씨좋은장씨
[BaekJoon] 5598번 : 카이사르 암호 (Python) 본문

코딩 1일 1문제! 오늘의 문제는 백준의 카이사르 암호 입니다.
5598번: 카이사르 암호
가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건
www.acmicpc.net
Solution
def caesar_cipher(string):
answer = []
for char in string:
if ord(char) > ord('C'):
temp = chr(ord(char) - 3)
elif ord(char) < ord('D'):
temp = chr(ord('Z') - ord('C') + ord(char))
answer.append(temp)
return "".join(answer)
if __name__ == "__main__":
string = input()
print(caesar_cipher(string))
Solution 풀이
변환전 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
변환후 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
이 문제의 카이사르 암호는 입력한 단어를 3문자씩 옮겨서 만드는 암호입니다.
문제는 카이사르 암호로 암호화 된 단어를 주면
해독하여 원래 단어를 출력하면 되는 문제입니다.
문제를 푸는데 주요하게 사용되는 것은
문자를 번호로 바꾸어주는 chr
숫자를 문자로 바꾸어주는 ord 입니다.
해독을 할때 에는 단어를 이루는 각 문자를 숫자로 바꾸고
여기서 -3을 한 뒤 다시 문자로 바꾸어 준 뒤
바꾼 값을 이어붙여보면 됩니다.
그런데 여기서 주의할 점은
D ~ Z 까지는 -3을 하여도 A ~ W 로 잘 변경이 되지만
chr(ord(char) - 3)
A ~ C 는 -3을 하게되면 제대로 바뀌지 않습니다.
A ~ C 는 X ~ Z 로 바뀌어야 하므로
Z - C - 입력 값 으로 바꾸어야합니다.
chr(ord('Z') - ord('C') + ord(char))
GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07
1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.
github.com
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 2755번 : 이번학기 평점은 몇점? (Python) (0) | 2021.08.22 |
---|---|
[BaekJoon] 14915번 : 진수 변환기 (Python) (0) | 2021.08.21 |
[BaekJoon] 12813번 : 이진수 연산 (Python) (0) | 2021.08.19 |
[BaekJoon] 6603번 : 로또 (Python) (0) | 2021.08.18 |
[BaekJoon] 1371번 : 가장 많은 글자 (Python) (0) | 2021.08.17 |