알고리즘 정복하기!/백준 문제풀이

백준 11575번 Python / 문자열

by seokii 2022. 3. 22.
728x90
반응형

문제풀이 GitHub

https://github.com/Seokii/baekjoon

 

GitHub - Seokii/baekjoon: Daily Commit for Baekjoon

Daily Commit for Baekjoon. Contribute to Seokii/baekjoon development by creating an account on GitHub.

github.com

 

문제링크

https://www.acmicpc.net/problem/11575

 

11575번: Affine Cipher

서쪽나라에서 특수훈련을 받은 정은이는 동쪽나라로 침투를 하게 되었다. 뛰어난 스파이였던 정은이는 동쪽나라의 정보를 입수하게 되었고 정보를 안전하게 서쪽나라로 전달하기 위해 아핀 암

www.acmicpc.net

 

풀이

dic = {'A':0, 'B':1, 'C':2, 'D':3, 'E':4, 'F':5, 'G':6, 'H':7,
       'I':8, 'J':9, 'K':10, 'L':11, 'M':12, 'N':13, 'O':14, 'P':15,'Q':16,
       'R':17, 'S':18, 'T':19, 'U':20, 'V': 21, 'W':22, 'X':23, 'Y':24, 'Z':25}
reverse_dic = dict(map(reversed, dic.items()))

t = int(input())

for _ in range(t):
    a, b = map(int, input().split())
    start = list(input())
    end = ''
    for i in start:
        x = dic[i]
        encryption = (a * x + b) % 26
        end += reverse_dic[encryption]
    print(end)

딕셔너리를 정의하고 문제를 해결했습니다.

dict(map(reversed, 딕셔너리.items())) 를 통해 딕셔너리의 Key와 Value를 역으로 만들었습니다.

 

테스트 케이스를 t로 선언 받고, for문으로 테스트 케이스만큼 반복합니다.

 

각 테스트 케이스에서는

암호의 식에 들어갈 a와 b를 입력받고 start변수에 암호화시킬 문자열을 입력받습니다.

리스트로 받은 문자열을 for문으로 암호화 처리를 진행합니다.

문자열에 대한 딕셔너리의 value값을 x로 받아 a, b, x를 사용해 공식에 대입합니다.

나온 결과값을 end 변수에 reverse_dic(기존의 딕셔너리의 key와 value값을 바꾼 딕셔너리)을 통해 숫자를 다시 문자열로 바꾼후 추가합니다.

for문을 통해 모든 과정이 끝나면 end 변수를 출력해 결과를 확인합니다.

 

 

728x90
반응형

댓글