| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- vue
- 항해99
- 코테 파이썬
- 오블완
- 라라벨
- 알고리즘
- Flutter
- 백준
- 뷰
- 개발자취업
- 코테
- DP
- 안드로이드
- Python
- 플러터
- ML
- 코딩테스트 준비
- 99클럽
- 티스토리챌린지
- Laravel
- flutter getx
- 코딩테스트
- 파이썬 코테
- C++
- 개발자 취업
- 코딩테스트준비
- til
- 파이썬
- c++ 코테
- react
- Today
- Total
잡다로그
[99클럽 코테 스터디] 20일차 TIL - 문자열, Decode the Message 본문
[20일차] 문자열
문제: https://leetcode.com/problems/decode-the-message/

* 번역: 주어진 문자열 key와 message가 있고, 각각 암호키와 비밀 메시지를 나타낸다. message를 해독하는 과정은 다음과 같다:
1) key에 등장하는 26개 알파벳 소문자의 첫 등장을 대체 표의 순서로 사용한다.
2) 대체 표는 알파벳 순서대로 정렬한다.
3) message의 각 문자는 테이블을 활용해서 대체된다.
4) 공백 ' '은 공백으로 변환된다.
예를 들어, 주어진 key = "happy boy"라면(실제 키에는 알파벡의 각 문자가 적어도 한 번은 등장한다), 우리는 ['h' -> 'a', 'a' -> 'b', 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f']인 대체표를 가지게 된다.
message를 해독한 결과를 반환하라.
Solution
알파벳을 문자열, 사전 등을 활용해서 직접 비교하는 방법도 있지만 아스키 코드를 활용해서 깔끔하게 정수 계산으로 문제를 해결할 수도 있다. alph의 인덱스가 곧 알파벳, 값이 key변수값이 된다.
class Solution:
def decodeMessage(self, key: str, message: str) -> str:
alph = []
ans = ''
for i in key:
if i != ' ' and i not in alph:
alph.append(i)
# a : 97
for i in message:
if i == ' ':
ans += ' '
else:
ans += chr(alph.index(i) + 97)
return ans
alph 배열에 알파벳 순서대로 암호키 문자가 저장되어 있다. 소문자 a의 아스키 코드는 97이므로 인덱스에 97을 더해주면, 문자열의 아스키 코드값이 나온다.
ans += chr(alph.index(i) + 97)
Another Solution
위의 풀이를 떠올리기 전에는 key가 알파벳, value가 key변수를 차례대로 저장하는 사전형 변수를 사용해야 하나 고민했었다. 아스키 코드로 풀면서 간단해졌지만, 다른 사람들의 풀이를 통해 사전형 변수를 굳이 쓰지 않고 문자열로도 인덱스를 활용할 수 있음을 배웠다.
class Solution:
def decodeMessage(self, key: str, message: str) -> str:
alphabet="abcdefghijklmnopqrstuvwxyz"
key= key.replace(" ","")
res=""
for i in key:
if i not in res:
res+=i
s=""
for i in range(len(message)):
if message[i]==" ":
s+=" "
else:
s+=alphabet[res.index(message[i])]
return s
또한 변수를 순회하며 공백을 처리해주지 않고도, replace 함수를 사용하여 공백을 제거할 수 있음을 알게 되었다.
key= key.replace(" ","")
나다어
나는 다음에 어떻게 풀까
.replace(' ', '')로 한 번에 문자열의 공백을 제거할 수 있다.- 파이썬에서 아스키 코드 관련 함수는
ord(문자)와char(숫자)이다. - 대문자 A의 아스키 코드는 65, 소문자 a의 아스키 코드는 97이다. 이후 알파벳 순서대로 코드도 1씩 증가한다.
- 문자열 붙이기는
append()가 아닌 + 연산자를 사용해야 한다. 혹은join()를 사용할 수 있다.

'Algorithm' 카테고리의 다른 글
| [99클럽 코테 스터디] 22일차 TIL - 정렬, Find Target Indices After Sorting Array (0) | 2024.06.22 |
|---|---|
| [99클럽 코테 스터디] 21일차 TIL - 정렬, Top K Frequent Elements (0) | 2024.06.21 |
| [99클럽 코테 스터디] 19일차 TIL - 문자열, Shuffle String (0) | 2024.06.18 |
| [Python/코테] 프로그래머스 입국심사 (0) | 2024.06.18 |
| [99클럽 코테 스터디] 18일차 TIL - 문자, Iterator for Combination (0) | 2024.06.18 |