728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제
문자와 숫자를 입력받아 숫자만큼 문자를 일정한 거리만큼 밀어 다른 알파벳으로 만든다.
2.문제풀이포인트
1. A와 a의 아스키 코드는 다르다. 대문자와 소문자를 구분해야한다.
2. 주어진 숫자만큼 밀면 알파벳 범위를 벗어나게된다. 순환구조를 만들어야한다.
3. 문자를 숫자로 바꿀때 ord()를 쓰고 숫자를 문자로 바꿀때 chr()함수를 쓴다.
4. 문자를 바로 바꿀수없으니 배열로 만든뒤, join으로 다시 합친다.
def solution(s, n):
s = list(s) #s를 배열로 만든다
for i in range(len(s)):
if s[i] == ' ': continue
corr = ord('A') if s[i].isupper() else ord('a')
s[i] = chr((ord(s[i])-corr+n) % 26 + corr)
answer = ''.join(s)
print(answer)
return answer
if __name__ == '__main__':
solution("AB", 1)
✔️주어진 문자가 대문자인지 소문자인지에 따라 초기시작 아스키코드가 달라진다.
corr = ord('A') if s[i].isupper() else ord('a')
✔️알파벳 몇번째 숫자인지 확인한다.
(ord(s[i])-corr
✔️n만큼 더한 값이 26을 넘는다면, 26(알파벳전체갯수)을 나눈 나머지값이 필요하다.
s[i]가 z라면 (z의 ASCII :122 a의 ASCII : 97)
122 - 97 = 25
z는 알파벳 25번째 글자다.
여기에 2를 더하고 27을 26으로 나누면 1이 나온다.
1에 a의 ASCII값을 더하면 98이므로 chr(98)은 'b'가 된다.
728x90
'알고리즘&자료구조 > Algorithm' 카테고리의 다른 글
프로그래머스 64065 - 튜플 (1) | 2024.04.26 |
---|---|
프로그래머스 12930 - 이상한 문자 만들기 (0) | 2024.04.24 |
프로그래머스 12949 - 행렬의 곱셈 (0) | 2024.04.24 |
프로그래머스 81302 - 거리두기 확인하기 (1) | 2024.04.19 |
프로그래머스 68645 - 삼각 달팽이 (0) | 2024.04.18 |