info | Lv0 | 요구사항 구현 |
1. 자격 증명
1. 문제 설명
왕좌에 앉으려는 자! 자격을 증명하라!
알고리즘 왕좌에 앉으려는 자는 자격을 증명해야 합니다. 만약 이 테스트를 '스스로' 통과하지 못한다면, 기본 문법을 다시 공부하고 와야 합니다. 앞으로 이보다 쉬운 문제는 없으니까요.
파이와 썬은 모든 알고리즘을 해독할 수 있는 알고리즘 7원석을 세계 어딘가에 숨겨두었다 공표하였습니다. 험난한 시련을 딛고 일어선 자만 이 시험을 통과할 수 있도록 설계되었습니다. 그가 남긴 문자는 아래와 같습니다.
자격을 얻으려는 자! 이곳으로 향하라!
" + +-+ -+- "
" ++ -- +-+ "
" ++-+ -+ - "
" + ++-+ -+ "
해(1)와 달(0), Code의 세상 안으로!(En-Coding)
주어진 문자열을 1과 0으로 바꾸고 아스키코드표 안에 문자로 바꾸세요.
2. 제한 사항
- 65 ≤ 주어진 숫자 ≤ 122
- 문자열은
+
,-
,공백
외에는 주어지지 않습니다. - 각각의 문자열은 1차원 리스트로 주어집니다.
- 공백은 주어질 수도 있고, 주어지지 않을 수도 있습니다.
3. 입출력 예
입력 | 출력 |
---|---|
[' + - - + - + - ', ' + + + - + - + ', ' + + - + + + - '] | 'Jun’ |
[' + + + - - + + ', ' + + + - + - - ', '++----+', '+++ --+ -', '+++-+ - -'] | 'start’ |
[' + + - - - - + ', ' + + - + + - - ', '+ +-- +++ ', ' ++- ++++'] | 'algo’ |
4. 입출력 설명
+
는1
로-
는0
으로 변경되어 ' + - - + - + - '는 1001010이 됩니다. 이 숫자는 10진수로 바꾸었을 때 74로 아스키코드표로 보면 대문자 J가 됩니다. 이와 같은 원리로 나머지 2개를 문자로 바꿔 조합하면 'Jun'이 됩니다.
5. 테스트 케이스
{
'que_number': 1,
'testcase': [['++-+-+-', '++--+-+', '++-+-+-', '+++-+-+'], ['++---++', '++----+', '+++-+--'], ['++-++--', '++-+--+', '++-++++', '++-+++-']],
'result': ['jeju', 'cat', 'lion'],
}
6. 내 풀이
def solution(data):
asciiList = []
for char in data:
asciiNum = ''
for pm in char:
if pm == '+':
asciiNum += '1'
elif pm == '-':
asciiNum += '0'
else:
continue
asciiList.append(asciiNum)
asciiConverted = list(map(lambda x: chr(int(x,2)) , asciiList ))
return ''.join(asciiConverted)
너무 길게 돌아서 푼 느낌이 있다...
왜 굳이 빈 문자열을 만들어서 거기에 문자를 더하고...
거기에 또 리스트를 만들어서 변환한 이진법 숫자로 된 문자를 집어넣었을까!
한 번 풀이를 보고 차이를 느껴보자...
7. 해설 답안
def solution(data):
result = ''
for i in data:
result += chr(int(i.replace(" ", "").replace("+", "1").replace("-", "0"),2))
return result
replace를 세 번 한다면 깔끔해진다.
출처: https://paullabworkspace.notion.site/1-08469970c23d4b27ab92804d6feaad08