문제풀이

프로그래머스) 시저 암호

이 문제는 각 글자마다의 n번째 후의 글자가 무엇인지 파악하는 것인데 z가 넘어갔을 때 다른 특수문자가 오는 것에서 멘붕이왔다... 도무지 방법을 모르겠어서 서칭하여 확인한 결과 내가 생각한 것보다 뭔가 복잡했다... 그 구조를 다시 뜯어 봄으로써 복기해봐야겠다!
추가로 오늘은 ord함수와 chr 함수를 찾아보면서 유니코드 숫자에 대해서 알게되었다.

def solution(s, n):                 #함수 실행
    str_list = list(s)              #주어진 s를 리스트 형태로 나눔
   
    concat = ''                     #for문 완성의 결과물로 빈 변수를 생성
    for i in str_list :             #리스트가 된 s를 순회
        if i == " ":                #띄어쓰기 문자는 그대로 돌려줌
            concat += " "
        elif i.islower():           #islower함수로 소문자인 경우에 해당함
                concat += chr((ord(i)-ord('a')+n)%26 + ord('a'))
        elif i.isupper():           #isupper함수로 대문자인 경우에 해당함
                concat += chr((ord(i)-ord('A')+n)%26 + ord('A'))
                #ord함수로 i의 유니코드로 변환->영어 A(a)가 시작점인 것을 고려하여 빼주고 더해야하는 n을 먼저 연산 후 26으로 나눠 나머지(%)연산자를 이용해 스펠링 26자로 나눔-> 다시 A(a) 더하여 해당하는 유니코드의 위치를 찾아줌-> chr함수를 이용해 유니코드를 다시 문자로 변환한다.
    return concat                   #찾은 유니코드의 문자를 concat으로 합쳐졌으니 반환함

프로그래머스) 숫자 문자열과 영단어

이 문제는 일단 네오와 프로도가 귀여웠다. 프로도가 보고있는 것은 'one4seveneight'...1478..?
주어진 s에 숫자가 아닌 스펠링으로 되어있는 숫자들을 모두 숫자형태로 바꾸어야하는 문제다. 정말 문제다.. 어떻게 해야하나 고민하기도 어려웠던 것 같다. 그냥 하나씩 바꿔주고 싶은데... 무튼 이러한 문제에서 이번에 활용한 함수는 replace! 아래 코드에서 복습하자!

def solution(s):                    #함수 실행
    #딕셔너리 형태로 0~9까지 key와 value로 텍스트, 숫자를 매치시켜주고! 
    dict = {'zero':0,'one':1,'two':2,'three':3,'four':4,'five':5,'six':6,'seven':7,'eight':8,'nine':9}
    for i in dict:                  #dict를 가지고 순회시키며 문자열을 뒤져봅시다.
        # replace(대치전, 대치후)는 특정문자를 원하는 문자로 대치시키는 함수
        #주어진 s 속에 순회하는 dict(딕셔너리)의 i가 있다면, dict의 i key를 가지고 있는 value를 str형태로 바꾼다는 것이다.
        s = s.replace(i, str(dict[i])) #대치한 s를 다시 s에 할당
    return int(s) #문자형을 숫자형으로 변환하여 반환
profile
Data analyst를 향해 도전하는 이야기

0개의 댓글