매일프로그래밍 [실리콘밸리 알고리즘] - 두 문자열이 1:1 암호화 가능한지 판별하시오. (18/04/31)


https://mailprogramming.com/

이 곳에서 1주마다 정기적으로 코딩문제를 받고, 풀어보고 있다.


실리콘밸리에서 소프트웨어 엔지니어로 일하고 있는 팀원들로 구성된 팀이라고 한다.


5. 18/04/31 (시험을 올백으로 마치고, 다시 알고리즘 문제를 푼다.)


길이가 같은 두 문자열(string) A 와 B가 주어지면, A 가 B 로 1:1 암호화 가능한지 찾으시오.


예제)

Input: “EGG”, “FOO”

Output: True // E->F, G->O


Input: “ABBCD”, “APPLE”

Output: True // A->A, B->P, C->L, D->E


Input: “AAB”, “FOO”

Output: False




풀이)

# -*- coding: utf-8 -*-
import sys

str1 = input("In 1: ")
str2 = input("In 2: ")

if len(str1) != len(str2):  # 문자열의 길이 체크
    print("Both string length must be same!")
    sys.exit()

dic = {}  # 대응하는 키를 저장하기 위해 딕셔너리 자료형을 활용해본다

dic[str1[0]] = str2[0]  # str1의 첫 번째 문자(key)와 대응하는 str2의 첫 번째 문자(value)를 딕셔너리에 저장한다

for i in range(1, len(str1)):
    if str1[i] in dic and dic[str1[i]] != str2[i]:  # 특정 문자(key)가 이미 dic에 존재하는데, 대응값(value)이 다른 경우 1:1 암호화는 불가능하다 
        print("Out: False")                       # (ex. str1: aa, str2: bc이면 첫 번째는 a->b인데, 두 번째는 a->c가 또 입력되므로 1:1 암호화가 불가능하다)
        sys.exit()
    dic[str1[i]] = str2[i]  # 특정 문자(key)의 대응값(value)를 매칭하여 dic에 저장
    
print("Out: True")  # if문에 걸리지 않으면 암호화 가능!



실행결과)









후기)

파이썬의 딕셔너리를 사용한 것이 신의 한수였다.
풀이를 보니 자바의 hashmap(딕셔너리와 유사)을 사용했다.
키와 값을 매칭시키는 구조를 가진 딕셔너리를 이용하니 쉽게 풀 수 있었다.

댓글