[Programmers] #120838 - 모스부호 (1) [Java][C++][Python]
모스부호로 이루어진 문자열을 공백 단위로 분리해 알파벳으로 변환하는 문제.
[Programmers] #120838 - 모스부호 (1) [Java][C++][Python]
1. 아이디어
모스부호와 알파벳 소문자를 1대1로 대응시키는 표를 만들고, 공백으로 구분된 모스부호 문자열 letter를 토큰 단위로 분리해 각각을 대응되는 문자로 치환하면 되는 문제다. 모스부호 사이 공백은 항상 하나이고 해독 불가능한 입력은 주어지지 않으므로, 공백 기준으로 자른 각 토큰을 표에서 조회해 이어 붙이기만 하면 된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(N)$ |
($N$ = letter의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.*;
class Solution {
public String solution(String letter) {
Map<String, Character> morse = Map.ofEntries(
Map.entry(".-", 'a'), Map.entry("-...", 'b'), Map.entry("-.-.", 'c'), Map.entry("-..", 'd'),
Map.entry(".", 'e'), Map.entry("..-.", 'f'), Map.entry("--.", 'g'), Map.entry("....", 'h'),
Map.entry("..", 'i'), Map.entry(".---", 'j'), Map.entry("-.-", 'k'), Map.entry(".-..", 'l'),
Map.entry("--", 'm'), Map.entry("-.", 'n'), Map.entry("---", 'o'), Map.entry(".--.", 'p'),
Map.entry("--.-", 'q'), Map.entry(".-.", 'r'), Map.entry("...", 's'), Map.entry("-", 't'),
Map.entry("..-", 'u'), Map.entry("...-", 'v'), Map.entry(".--", 'w'), Map.entry("-..-", 'x'),
Map.entry("-.--", 'y'), Map.entry("--..", 'z')
);
StringBuilder sb = new StringBuilder();
for (String s : letter.split(" ")) {
sb.append(morse.get(s));
}
return sb.toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
using namespace std;
string solution(string letter) {
unordered_map<string, char> morse = {
{".-", 'a'}, {"-...", 'b'}, {"-.-.", 'c'}, {"-..", 'd'}, {".", 'e'}, {"..-.", 'f'}, {"--.", 'g'},
{"....", 'h'}, {"..", 'i'}, {".---", 'j'}, {"-.-", 'k'}, {".-..", 'l'}, {"--", 'm'}, {"-.", 'n'},
{"---", 'o'}, {".--.", 'p'}, {"--.-", 'q'}, {".-.", 'r'}, {"...", 's'}, {"-", 't'}, {"..-", 'u'},
{"...-", 'v'}, {".--", 'w'}, {"-..-", 'x'}, {"-.--", 'y'}, {"--..", 'z'}};
string ans;
stringstream ss(letter);
string code;
while (ss >> code) {
ans += morse[code];
}
return ans;
}
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
def solution(letter):
morse = {
".-": "a",
"-...": "b",
"-.-.": "c",
"-..": "d",
".": "e",
"..-.": "f",
"--.": "g",
"....": "h",
"..": "i",
".---": "j",
"-.-": "k",
".-..": "l",
"--": "m",
"-.": "n",
"---": "o",
".--.": "p",
"--.-": "q",
".-.": "r",
"...": "s",
"-": "t",
"..-": "u",
"...-": "v",
".--": "w",
"-..-": "x",
"-.--": "y",
"--..": "z",
}
return "".join(morse[code] for code in letter.split(" "))
This post is licensed under CC BY 4.0 by the author.