이 험난한 세상에서어어~

둘만의 암호, python 본문

algorithm/코딩 테스트

둘만의 암호, python

토끼띠NJW 2023. 6. 20. 22:26

문제 설명

문자열 s에 있는 알파벳을 index 뒤에 있는 문자로 바꿔준다.

만일 문자를 하나씩 뒤로 밀 때 skip에 존재하는 문자가 있다면 해당 문자는 뛰어넘는다. 또한 만일 z를 넘어가면 다시 a로 돌아간다.

이렇게 바뀐 문자를 반환하는 문제이다.

https://school.programmers.co.kr/learn/courses/30/lessons/155652

 

프로그래머스

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

programmers.co.kr

문제 풀이

첫 번째 접근

일단 문제에 나와있던 대로 문자열에서 문자를 하나씩 접근한다.

그리고 해당 문자를 ord()를 사용해서 아스키 코드로 바꿔준값을 post에 저장한다. 다음 while문을 돌려주면서 문자를 index만큼 뒤로 밀어줄 건데, count 변수를 둬서 count가 index와 같아지면 해당 문자를 더하고 while문을 탈출하도록 한다.

post를 하나씩 뒤로 미는데, 만일 123이 돼서 알파벳 소문자 범위를 벗어났다면 post를 97로 돌려서 a로 바꿔준다. 나는 처음에 122로 나눈 다음 96을 더해주는 방식을 사용했는데, 생각해보니 어차피 하나씩 더해주는 것이라 굳이 이렇게 해줄 필요는 없었다. 

뿐만 아니라 post를 chr()로 이용해 문자로 바꿔준 다음 skip에 있는지 확인했다. 그리고 해당 값이 없으면  count에 1을 더해서 한 칸 미뤄졌음을 알려줬다.

코드

def solution(s, skip, index):
    answer = ''
    
    for i in s:
        post = ord(i)
        count = 0
        while True:
            if count == index:
                answer += chr(post)
                break
            post += 1
            if post > 122:
                post = 97
            if chr(post) in skip:
                continue
            else:
                count += 1
    return answer

 

'algorithm > 코딩 테스트' 카테고리의 다른 글

컨베이어 벨트 위의 로봇  (0) 2023.06.22
감시, python  (0) 2023.06.21
치킨 배달  (0) 2023.06.19
연구소, python  (0) 2023.06.19
공원 산책  (0) 2023.06.18