코테 준비/프로그래머스

[level 1] 둘만의 암호

쿠쿠*_* 2023. 5. 9. 23:46

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

 

프로그래머스

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

programmers.co.kr

아래의 풀이로 했을때는 분명 주어진 예시 테스트는 통과했는데 나머지는 통과하지 못했다..

흠..틀린 이유가 무엇일지 고민해본다..흑흑 도저히 모르겠어서 다른 블로그 풀이를 참고했다.

#틀린 풀이
def solution(s, skip, index):
    answer = []
    for i in s:
        temp=[]
        cnt,alpha=0,0
        for j in range(1,index+1):
            temp.append(chr(ord(i)+j))
        for t in temp:
            if t  in skip:
                temp.remove(t)
                cnt+=1
        print(temp)
        alpha=ord(i)+index+cnt
        #print(alpha)
        
        if alpha>122:
            alpha-=26
        answer.append(chr(alpha))
    #print(answer)
        
    return ''.join(answer)

 

핵심포인트

✅최대한 간단하게 풀어야 되는 것 같다. 위에처럼 복잡하게 풀면 안되는 문제다.

#옳은 풀이 1
def solution(s, skip, index):
    answer = ""
    
    alpha = "abcdefghijklmnopqrstuvwxyz" # 알파벳
    
    for ch in skip: # ch => skip의 문자 하나하나
        if ch in alpha:
            alpha = alpha.replace(ch, "") # 알파벳 안에 skip 문자들 제거
    
    for i in s:
        change = alpha[(alpha.index(i) + index) % len(alpha)] # s의 문자 인덱스 + index를 alpha의 길이로 나눈 나머지를 알파벳으로 변환
        answer += change
    
    return answer
#옳은 풀이 2
    def solution(s, skip, index):
    answer = ''
    
    character = []
    # skip을 제외한 알파벳들 character에 대입
    for i in range(ord('a'), ord('z') + 1):
        if chr(i) in skip:
            continue
        character.append(chr(i))
    
    # 해당 character + index를 answer에 넣어주기
    for i in range(len(s)):
        answer += character[(character.index(s[i]) + index) % (len(character))]
    
    return answer

'코테 준비 > 프로그래머스' 카테고리의 다른 글

[level 1] 덧칠하기  (0) 2023.05.10
[level 1] 카드 뭉치  (0) 2023.05.10
[level 1] 개인정보 수집 유효기간  (0) 2023.05.09
[level 1] 문자열 나누기  (0) 2023.05.04
[level 1] 명예의 전당(1)  (0) 2023.05.04