cording test

Lv.1 시저 암호(ascii code 사용)

JM Lee 2023. 5. 20. 19:16
728x90

코딩테스트 연습 - 시저 암호 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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