[프로그래머스] PCCE 모의고사 1회(10번) Python

주재민·2023년 9월 10일

코딩테스트

목록 보기
5/10
post-thumbnail

🔏 문제설명

1) 문제설명

애너그램(Anagram) 이란 주어진 단어를 이루는 문자의 위치를 뒤바꾸어 새로운 단어를 만드는 것을 말합니다. 애너그램을 이용해 암호화, 복호화를 하려고합니다.

암, 복호화할 단어와 애너그램 테이블이 주어집니다. 애너그램 테이블은 단어를 암호화한 후의 문자들의 위치가 저장되어 있습니다.

예를들어 문자열 "Hello"를 암호화 할 때, 애너그램 테이블이 [4, 2, 0, 1, 3]이면, 문자열의 0번째 값인 'H'는 애너그램 테이블의 0번째 값에 해당하는 4에 의해 4번째로 이동하고 같은 방식으로 'e'는 2번째로, 'l'은 0번째로, 'l'은 1번째로, 'o'는 3번째로 이동하여 "lleoH"가 됩니다.

위의 방법으로 만들어진 애너그램 암호문을 복호화하려면 애너그램 테이블의 인덱스와 값의 반대 방향으로 문자열의 순서를 바꿔주면 됩니다.

예를들어 암호화된 문자열이 "lleoH"이고 애너그램 테이블이 [4, 2, 0, 1, 3]이면, 애너그램 테이블의 0번째 값인 4에 해당하는 문자인 'H'는 해당 인덱스인 0번째로 이동하고 같은 방식으로 'e'는 1번째로, 'l'은 2번째로, 'l'은 3번째로, 'o'는 4번째로 이동하여 "Hello"가 됩니다.

암호화할 문자열 text와 애너그램 테이블 anagram, 암호화를 할지 복호화를 할지가 저장된 변수 sw가 주어질 때 암호화 또는 복호화된 문자열을 return하도록 solution함수를 완성해 보세요.

2) 제한사항

  • 5 ≤ text의 길이 = anagram의 길이 ≤ 50
  • text는 대문자와 소문자 알파벳으로 이루어진 문자열 입니다.
  • 0 ≤ anagram의 원소 < text의 길이
  • anagram의 원소는 중복되지 않습니다.
  • sw는 True또는 False입니다.
  • sw가 True이면 암호화, False이면 복호화를 해야합니다.

3) 입출력 예시


🔐 나의 풀이

🔑 접근

  • text의 각 문자를 value로 anagram의 각 원소를 key로 묶어 딕셔너리 형태로 저장한다. 그렇게 함으로써 문자를 순서에 맞게 이동시킬 수 있을 것이다. 이 때, 복호화를 위해 기존의 text는 보존한다.
  • 암호화 할 때는 딕셔너리[anagram의 원소] 형태를 통해 호출해 문자를 조건에 맞게 뒤섞는다.
  • 복호화 할 때는 텍스트[anagram의 원소] 형태를 통해 호출해 암호화된 text를 복호화 할 수 있다.

🔑 나의 코드

def solution(text, anagram, sw):
    answer = ''
    char = [i for i in text] #text를 한 문자씩 쪼개어 리스트화
    dic = {}
    
    #anagram의 원소를 key로 text의 문자를 value로 딕셔너리 형성
    for i in range(len(char)):
            dic[anagram[i]] = char[i]
            
    #암호화일 경우 딕셔너리에서 호출        
    if sw == True:
        for j in range(len(char)):
            answer += dic[j]
            
    #복호화일 경우 문자리스트에서 호출        
    if sw == False:
        for k in anagram:
            answer += char[k]
                       
    return answer

🔓 결과


PCCE 모의고사 1회의 모든 풀이가 끝났다. 엄청 어렵다는 느낌은 받지 않았다. 풀이를 위한 아이디어는 금새 떠올려도 코드로 옮기는 과정에 버벅임이 있어서 시간이 좀 걸린다. 공부를 더 해서 이부분에서 시간 줄이는 연습을 해야될거같다.

0개의 댓글