Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- 다시보기
- 개인회고
- 그래프이론
- 기술면접
- 알고리즘스터디
- 이진탐색
- U_stage
- 단계별문제풀이
- dp
- 부스트캠프_AITech3기
- 이코테
- 최단경로
- ODQA
- 부스트캠프_AITech_3기
- Level2_PStage
- 정렬
- 다이나믹프로그래밍
- Level2
- mrc
- python3
- 파이썬 3
- 알고리즘_스터디
- 주간회고
- 백준
- dfs
- Level1
- 그리디
- 구현
- 백트랙킹
Archives
- Today
- Total
국문과 유목민
19. 시저암호 본문
0. 문제
링크) https://programmers.co.kr/learn/courses/30/lessons/12926
1. 알고리즘 계획
- 해당 문자들의 binarycode에 대해 확인한다.
- 코드의 부분을 대문자 부분과 소문자 부분으로 나누어 계산한다.
- 일정한 값을 초과하게 되면, 다시 처음으로 돌아갈 수 있게 코드를 짠다.
2. 나의 코드
def solution(s, n):
answer = ""
for idx in range(len(s)):
res = ord(s[idx])
if res == 32:
answer += s[idx]
continue
elif res >= 65 and res <= 90:
res += n
if res > 90:
answer += chr(res - 26)
else:
answer += chr(res)
else:
res += n
if res > 122:
answer += chr(res - 26)
else:
answer += chr(res)
return answer
3. 다른 사람의 코드
def caesar(s, n):
s = list(s)
for i in range(len(s)):
if s[i].isupper():
s[i] = chr((ord(s[i])-ord('A') + n )% 26 + ord('A'))
elif s[i].islower():
s[i] = chr((ord(s[i])-ord('a') + n) % 26 +ord('a'))
return "".join(s)
- 대문자와 소문자의 구분을 isupper()와 islower()함수를 이용해 간편하게 구분함
- 각 알파벳에 대한 이진 코드를 알 필요도 없이 'A-Z'의 경우 가장 기본이 되는 'A'값을 기준으로 이진코드를 계산하고,
'a-z'의 경우 가장 기본이 되는 'a'값을 기준으로 이진코드를 계산해서 손쉽게 계산을 수행함.
※ 위의 연산은 list를 기준으로 작성한 것이기에 마지막에 join함수를 활용해서 문자로 만들어야 한다.
4. 정리 및 리뷰
- 비교적 연습할 때, 처음에 풀었던 문제로써 많은 어려움이 있었고 유연하지 못했던 부분이 있었다.
- 다른 사람의 코드를 보고 파이썬의 함수의 편이성과 간결성에 대해서 놀랐었던 문제였다.
코드 만족도: ★★★☆☆
'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글
21. 이상한 문자 만들기 (0) | 2020.09.11 |
---|---|
20. 약수의 합 (0) | 2020.09.10 |
18. 문자열을 정수로 바꾸기 (0) | 2020.09.10 |
17. 수박수박수박수박수박수? (0) | 2020.09.10 |
16. 소수 찾기 (0) | 2020.09.10 |
Comments