728x90
코딩테스트 연습 - 시저 암호 | 프로그래머스 스쿨 (programmers.co.kr)
230520 알박기 2번째 문제.
이번 문제는 전형적인 ascii code를 사용하는 문제이다.
전 문제에서 여러 가지 방식으로 풀고 기분이 좋아진 우리는
여기서도 ascii code 외에 다른 방식을 생각해보려 노력했지만..
도저히 생각이 나지 않거나, 나더라도 상당히 먼 길을 돌아야 해서 효율성을 고려하고 포기했다.
# ascii code를 사용하지 않은 나의 코드
def solution(s, n):
low = "abcdefghijklmnopqrstuvwxyz" # 26글자
up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
answer = ''
for i in s:
if i in low:
ind = low.find(i)+n
answer += low[ind%26]
elif i in up:
ind = up.find(i)+n
answer += up[ind%26]
else: # 공백일 경우도 고려
answer += " "
return answer
# ascii code를 사용한 팀원의 코드
# ord와 chr 정도는 익혀두자
def solution(s, n):
answer=''
for i in s:
if i==" ":
answer += i
continue
start = ord('a') if 'Z'<i else ord('A')
neword=(ord(i)-start+n)%26+start
answer +=chr(neword)
return answer
ascii code에서 ord와 chr에 대해서 간단히 알아보았다.
ord()
- 문자열을 아스키코드로 반환할 수 있는 함수이다
- ord(c) 형태로 이용한다. 괄호( ) 안에 문자를 넣으면 그 문자에 해당하는 아스키코드를 숫자로 반환한다.
chr()
- chr(i) 형태로 이용한다. 괄호( ) 안에 숫자를 넣으면 그 숫자의 아스키코드에 대응하는 문자를 반환한다.
# string 모듈을 사용한 팀원의 코드
import string
a = string.ascii_uppercase
b = string.ascii_lowercase
answer = ""
for i in s:
if i.islower():
index = b.find(i)+n
answer += b[index % 26]
elif i.isupper():
index = a.find(i)+n
answer += a[index % 26]
elif i == ' ':
answer += ' '
print(answer)
전체적으로 코드가 비슷함을 알 수 있다.
'cording test' 카테고리의 다른 글
LV.1 대충 만든 자판 (0) | 2023.05.31 |
---|---|
Lv.2 스킬트리 (2) | 2023.05.20 |
Lv.0 코드 처리하기 (0) | 2023.05.20 |
Lv.1 체육복 (0) | 2023.05.20 |
Lv.1 신고 결과 받기 (1) | 2023.05.17 |