2024. 3. 5. 00:01ㆍ파이썬_알고리즘(코딩테스트)/level1
이 문제를 보기전에 아스키코드를 먼저 알아야할것이다.
아스키코드란?
아스키는 미국 정보교환 표준 부호(American Standard Code for Information Interchange)이다.
줄여서는 ASCII 라고 표현한다. 말 그대로 정보를 교환하는 부호이다.
문자열이나 기호를 컴퓨터에 이용하기 위해서는 컴퓨터에 전달할 수 있도록 코드화, 부호화해야 하고 그런 과정을 문자 인코딩이라고 한다. 아스키코드는 기호와 영문알파벳에 적합한 문자 인코딩이다.


내가 제출한 코드
def solution(s, n):
# 대문자 65 - 90, 소문자 97 - 122
# A = 65, Z = 90, z = 122, 공백 = 32
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)
만약 대문자일 경우에는
- ord(s[i]) - ord("A"): 현재 대문자 문자의 유니코드 코드 포인트에서 대문자 'A'의 유니코드 코드 포인트를 빼서 알파벳 상에서의 위치를 얻는다.
- (ord(s[i]) - ord("A") + n) % 26: 이동할 거리 n을 더하고 알파벳 길이(26)로 나눈 나머지를 계산하여 알파벳 상에서 이동한 위치를 구한다.
- chr(... + ord("A")): 다시 알파벳 상에서의 위치에 대응하는 대문자를 구한다.
소문자도 대문자랑 동일하다
- return "".join(s) : 리스트로 변환한 문자열을 다시 합쳐서 하나의 문자열로 반환한다.
다른 사람이 제출한 코드
def caesar(s, n):
lower_list = "abcdefghijklmnopqrstuvwxyz"
upper_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result = []
for i in s:
# 공백일경우
if i is " ":
result.append(" ")
elif i.islower() is True:
new_ = lower_list.find(i) + n
result.append(lower_list[new_ % 26])
else:
new_ = upper_list.find(i) + n
result.append(upper_list[new_ % 26])
return "".join(result)
소문자, 대문자 알파벡을 담을 문자열을 정의한 다음에 공백일 경우에는 공백 그대로 결과 리스트에 추가되고,
그리고 elif i.islower() is True:는 elif i.islower():로 수정해서 작성해도 될 것 같다.
- lower_list.find(i) : 소문자 문자열에서 현재 문자의 인덱스를 찾는다.
- 이후 이동할 거리 n을 더하고, 소문자 알파벳 길이 26으로 나눈 나머지를 구해서 결과 리스트에 추가한다.
대문자도 동일하다.
코드를 보니깐 다른사람이 적어둔 코드가 더 간편한거 같기도 하다.
'파이썬_알고리즘(코딩테스트) > level1' 카테고리의 다른 글
| level1_홀짝에 따라 다른 값 반환하기 (0) | 2024.06.24 |
|---|---|
| level1_숫자 문자열과 단어 (0) | 2024.06.20 |
| level1_최소직사각형 (0) | 2024.02.29 |
| level1_삼총사 (0) | 2024.02.26 |
| level1_크기가 작은 부분문자 (0) | 2024.02.26 |