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
													
											
												
												- pandas profiling
- eda
- Gaimification
- ProfileReport
- 코딩테스트
- Product Demand
- 코딩테스트연습
- 웨어하우스 보관 최적화
- Labor Management System
- SQL
- Inventory Optimization
- SKU Consolidation
- 데이터분석
- tensorflow
- 당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까
- HackerRank
- ModelCheckPoint
- forecast
- MySQL
- 프로그래머스
- 딥러닝
- oracle
- 파이썬
- 피그마인디언
- ABC Analysis
- leetcode
- TensorFlowGPU
- 신경쓰기의 기술
- kaggle
- MS SQL Server
													Archives
													
											
												
												- Today
- Total
오늘도 배운다
시저 암호 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 본문
문제
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제출답안
def solution(s, n):
    # A-Z: 65-90, a-z: 97-122. A-Z 25개
    answer = ''
    for letter in s:
        ascii = ord(letter) # 글자의 아스키코드
        new_ascii = ascii+n # 아스키코드에 n 더하기
        
        # n을 더했을 때  Z(z)의 코드를 넘을 경우, A(a) 코드 + new_ascii % (Z(z)코드 +1)
        if letter.isupper(): # 대문자의 경우: A - 65, Z - 90
            
            answer = answer+chr(65+new_ascii%91) if new_ascii> 90 else answer+chr(new_ascii)
        elif letter.islower(): # 소문자의 경우: a - 97, z - 122
            answer = answer+chr(97+new_ascii%123) if new_ascii> 122 else answer+chr(new_ascii)            
        else: # 공백인 경우
            answer += ' '
    return answer
제출 후 개선답안
숫자를 더하더라도 특정 범위 내에서 순환시키려면
범위의 첫번째 값 + (기존값 + - 범위 내 첫번째 값 + n) % 범위내 개수
코드의 가독성이 좋아짐.
성능면에서는 차이가 없는듯하며
테스트 13에서는 오히려 떨어짐.
>> 호출하는 함수가 많아서 그런가?
def solution(s, n):
    answer = ''
    for letter in s:
        if letter.isupper():
            answer += chr(ord('A') + (ord(letter)-ord("A")+n)%26)
        elif letter.islower():
            answer += chr(ord('a') + (ord(letter)-ord("a")+n)%26)
        else:
            answer += ' '
    return answer


문제 바로가기
728x90
    
    
  '코딩테스트연습(파이썬)' 카테고리의 다른 글
| 소수 찾기 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 (0) | 2022.12.07 | 
|---|---|
| 2016년 / 프로그래머스, 파이썬 / 코딩테스트 연습 연습문제 (0) | 2022.12.06 | 
| 완주하지 못한 선수 / 프로그래머스, 파이썬 코딩테스트 연습 해시 (0) | 2022.12.05 | 
| 자연수 뒤집어 배열로 만들기 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 (0) | 2022.12.05 | 
| 약수의 합 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 (0) | 2022.12.03 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				 
								 
								 
								