모스 부호 (1)_programmers_lev00
<코딩 테스트> 모스부호 (1)
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.
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값은 소문자입니다.
letter의 모스부호는 공백으로 나누어져 있습니다.
letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
해독할 수 없는 편지는 주어지지 않습니다.
편지의 시작과 끝에는 공백이 없습니다.
<나의 풀이 과정>
✔HashMap 이란?
HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는 자료구조입니다.
여기서 키와 값은 모두 객체인점을 활용하여 문제를 풀이하였습니다.
HashMap<String,String> map1 = new HashMap<String,String>();
String[] letters = letter.split(" ");
//꼭 " " 을 한칸 띄어줘야 오류가 없습니다.
매개 변수로 받는 모스부호가 ".... . .-.. .-.. ---" 일때 띄어쓰기가 한개가 있는 기준으로 문자열을 나눠야 하기 때문에
""에 띄어쓰기가 없다면 오류가 납니다.
모스부호를 키에 담고 알파벳을 value에 담아서 활용하였습니다.
<나의 풀이 코드>
import java.util.HashMap;
class Solution {
public String solution(String letter) {
String answer = "";
String[] str = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
HashMap<String,Character> map = new HashMap<String,Character>();
String[] letters = letter.split(" ");
for (int i = 0; i < str.length; i++) {
map.put(str[i],(char)(97+i));
}
for (String string : letters) {
answer+= map.get(string);
}
return answer;
}
}
<다른사람 풀이 1>
import java.util.*;
class Solution {
public String solution(String letter) {
Map<String, Character> morseMap = new HashMap<>();
String[] morse = new String[]{".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
for (int i = 0; i < morse.length; i++) {
morseMap.put(morse[i], (char)('a' + i));
}
String[] words = letter.split(" ");
StringBuilder sb = new StringBuilder();
for (String w : words) {
sb.append(morseMap.get(w));
}
return sb.toString();
}
}