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(딕셔너리와 유사)을 사용했다.
키와 값을 매칭시키는 구조를 가진 딕셔너리를 이용하니 쉽게 풀 수 있었다.
댓글
댓글 쓰기