[SWEA][D3][#10804] 문자열의 거울상

작성:    

업데이트:

카테고리:

태그: , ,

출처

학습용 포스트입니다. 본 포스트가 문제가 될 시 수정 또는 삭제하겠습니다.


문제

‘b’, ‘d’, ‘p’, ‘q’로 이루어진 문자열이 주어진다. 이 문자열을 거울에 비추면 어떤 문자열이 되는지 구하는 프로그램을 작성하라.

예를 들어, “bdppq”를 거울에 비추면 “pqqbd”처럼 나타날 것이다.


입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 ‘b’, ‘d’, ‘p’, ‘q’만으로 이루어진 하나의 문자열이 주어진다. 문자열의 길이는 1이상 1000이하이다.


출력

각 테스트 케이스마다 주어진 문자열을 거울에 비춘 문자열로 출력한다.


예제

입력

2
bdppq
qqqqpppbbd


출력

#1 pqqbd
#2 bddqqqpppp


My Sol

T = int(input())
for tc in range(T):
    a = input()
    c = ''
    for t in a:
        if t == 'p':
            cp = 'q'
        elif t == 'q':
            cp = 'p'
        elif t == 'b':
            cp = 'd'
        elif t == 'd':
            cp = 'b'
        c = cp + c
    print(f'#{tc+1} {c}')

회문과 함께 상대되는 알파벳으로 바꿔주는 것이 까다로워 보이지만 상당히 간단히 풀리는 문제였다. 순서를 바꾸고 알파벳을 좌우대칭되는 상대 알파벳으로 바꾸는 과정을 한 번에 진행하기 위해 입력값의 처음부터 조회하여 각각의 알파벳이 무엇인지에 따라 판별하여 반대되는 순서로 이어붙여주면 되겠다.


결과

PASS


모범 답안

ref_dict = {"p":"q", "q":"p", "d":"b", "b":"d"}
T = int(input())
for t in range(1, T+1):
    strings = input()
    rs = ""
    for s in strings:
        rs = ref_dict[s] + rs
    print(f"#{t}", rs)

동기의 코드인데, 딕셔너리를 사용하여 조건문의 여러 차례 조회 없이 깔끔하게 key를 조회해 value를 출력하는 식으로 작성하셨다. 실행시간 자체는 내 코드가 더 짧긴 하지만 p와 q 등의 관계를 딕셔너리를 이용하여 직관적으로 작성하였기 때문에 인상적이어서 가져와봤다.

댓글남기기