[문제]
당신에게 적군의 코드를 해석하라는 비밀 미션이 주어졌다. 당신은 그들이 메세지를 다음과 같은 방법으로 암호화한다는 것을 이미 알아냈다. 'a'와 'z'사이의 알파벳을 두자리수 01과 26 사이의 숫자에 할당한다. 메세지는 각 알파벳을 할당된 숫자로 변환하여 암호화된다. 예를 들어, 't'는 20에 할당되고, 'e'는 05에 할당되고, 's'는 19에 할당되어 "test"는 "20051920"으로 암호화된다. 모든 원본 메세지는 소문자만으로 구성되어 있다.
주어진 string code에는 숫자와 문자의 할당이 나타나 있다. 첫번째 문자는 01에 할당되고, 두번째 문자는 02에 할당되는 식으로 26까지 이어진다. 또한 주어진 string message 에는 암호화되지 않은 원본 메세지 혹은 암호화된 메시지가 있다. 만약 원본 메세지가 주어졌다면 메세지를 암호화하여 반환하고, 암호화된 메세지가 주어졌다면 원본 메세지를 반환하라.
풀이 1) - python
더보기
class Solution:
def solution(self, code, message):
rule = dict()
for idx, c in enumerate(code):
rule[c]=str(idx+1).zfill(2)
rule[str(idx+1).zfill(2)]=c
answer = ""
if message[0].isdigit():
for idx in range(len(message)//2):
answer += rule[message[2*idx:2*idx+2]]
else:
for m in message:
answer += rule[m]
return answer
풀이 2) - python
더보기
class Solution:
def solution(self, code, message):
code = list(code)
answer = ''
if message.isdigit():
message = [int(message[i:i+2]) for i in range(0, len(message), 2)]
for i in message:
answer += code[i-1]
else:
for i in message:
answer += str(code.index(i) + 1).rjust(2, '0')
return answer
풀이 3) - java
더보기
public class Solution{
public String solution(String code, String message){
String answer = "";
for(int i=0;i<message.length();i++) {
if(message.charAt(i)>='a' && message.charAt(i)<='z') {
int index=-1;
for(int j=0;j<code.length();j++) {
if(message.charAt(i)==code.charAt(j)) {
index=j+1; //첫 알파벳은 01에 매핑되므로 +1
if(index<10) answer+="0"+Integer.toString(index); //한자리 숫자일 경우 앞에 0추가
else answer+=Integer.toString(index);
break;
}
}
}else if(message.charAt(i)>='0' && message.charAt(i)<='9') {
String temp = Character.toString(message.charAt(i))+Character.toString(message.charAt(i+1));
answer+=code.charAt(Integer.parseInt(temp)-1); //01이 a를 표현하므로 index는 1 감소
i++; //숫자일경우 두자리가 한 알파벳을 표현하기 때문에 2씩 증가해야함
}
}
return answer;
}
}
'workSpace > ALGORITHM' 카테고리의 다른 글
[기념품 행사] (0) | 2021.02.02 |
---|---|
[가방 퀴즈] (0) | 2021.02.02 |
[숫자 문자열 정렬하기] (0) | 2021.02.02 |
[문자열 수정하기] (0) | 2021.02.02 |
[자동차를 사는 법] (0) | 2021.02.02 |