<문제 제시>
<문제설명>
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다.
그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때,
letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
<예시 입출력>
<문제 해결 과정>
모스부호는 정해진 패턴이 있으므로
그에 해당하는 데이터셋을 만들어야했다.
Try 1)
// answer에 더해지지 않음, 비효율적
String[] list = letter.split(" ");
for(int i = 0; i < list.length; i++) {
String cp = list[i];
if(cp == ".-") answer+= "a";
else if(cp == "-...") answer+= "b";
else if(cp == "-.-.") answer+= "c";
else if(cp == "-..") answer+= "d";
else if(cp == ".") answer+= "e";
else if(cp == "..-.") answer+= "f";
else if(cp == "--.") answer+= "g";
else if(cp == "....") answer+= "h";
else if(cp == "..") answer+= "i";
else if(cp == ".---") answer+= "j";
else if(cp == "-.-") answer+= "k";
else if(cp == ".-..") answer+= "l";
else if(cp == "--") answer+= "m";
else if(cp == "-.") answer+= "n";
else if(cp == "---") answer+= "o";
else if(cp == ".--.") answer+= "p";
else if(cp == "--.-") answer+= "q";
else if(cp == ".-.") answer+= "r";
else if(cp == "...") answer+= "s";
else if(cp == "-") answer+= "t";
else if(cp == "..-") answer+= "u";
else if(cp == "...-") answer+= "v";
else if(cp == ".--") answer+= "w";
else if(cp == "-..-") answer+= "x";
else if(cp == "-.--") answer+= "y";
else if(cp == "--..") answer+= "z";
}
리스트를 split()메서드로 공백 기준 분리하여 조건문 처리로 cp에 해당하는 문자를 answer에 누적하고자하였다.
하지만 answer에 누적되지 않는 문제와, 비효율적인 코드 방식이었다.
Solution 1)
자바의 자료구조인 HashMap을 사용하여 키와 값타입으로 넣은 후 키를 접근하여 값을 answer에 누적시키는 방법으로 풀어보고자하였다.
Map<String, String> alphabetMap = new HashMap<String, String>() {
{
put(".-", "a");
put("-...", "b");
put("-.-.", "c");
put("-..", "d");
put(".", "e");
put("..-.", "f");
put("--.", "g");
put("....", "h");
put("..", "i");
put(".---", "j");
put("-.-", "k");
put(".-..", "l");
put("--", "m");
put("-.", "n");
put("---", "o");
put(".--.", "p");
put("--.-", "q");
put(".-.", "r");
put("...", "s");
put("-", "t");
put("..-", "u");
put("...-", "v");
put(".--", "w");
put("-..-", "x");
put("-.--", "y");
put("--..", "z");
}
};
HashMap을 <String,String>으로 이루어지게 만들고, put()메서드로 값을 넣는다.
String[] letterArr = letter.split(" ");
for (String arr : letterArr) {
answer += alphabetMap.get(arr);
}
for-each문으로 letter.split(" ")를 통해 하나하나 값을 옮겨 담고,
HashMap에서 get()메서드로 해당하는 문자를 가져와 answer에 누적한다.
<전체코드>
import java.util.HashMap;
import java.util.Map;
public class morse_code {
public static String solution(String letter) {
String answer = "";
Map<String, String> alphabetMap = new HashMap<String, String>() {
{
put(".-", "a");
put("-...", "b");
put("-.-.", "c");
put("-..", "d");
put(".", "e");
put("..-.", "f");
put("--.", "g");
put("....", "h");
put("..", "i");
put(".---", "j");
put("-.-", "k");
put(".-..", "l");
put("--", "m");
put("-.", "n");
put("---", "o");
put(".--.", "p");
put("--.-", "q");
put(".-.", "r");
put("...", "s");
put("-", "t");
put("..-", "u");
put("...-", "v");
put(".--", "w");
put("-..-", "x");
put("-.--", "y");
put("--..", "z");
}
};
String[] letterArr = letter.split(" ");
for (String arr : letterArr) {
answer += alphabetMap.get(arr);
}
return answer;
}
public static void main(String[] args) {
String letter = ".... . .-.. .-.. ---";
System.out.println(solution(letter));
}
}
모스부호를 코드로 풀어내는 과정이 막막했지만 HashMap 자료구조를 통하여 쉽게 값에 접근하는 방법을
알아낼 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120838
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '구슬을 나누는 경우의 수' - Java (1) | 2023.04.29 |
---|---|
[프로그래머스] '2차원으로 만들기' - Java (0) | 2023.04.28 |
[프로그래머스] '순서쌍의 개수' - Java (0) | 2023.04.27 |
[프로그래머스] '진료 순서 정하기' - Java (0) | 2023.04.27 |
[프로그래머스] '옹알이 (1)' - Java (0) | 2023.04.26 |