📑 1. 문제설명

입출력 예
letter | result |
".... . .-.. .-.. ---" | "hello" |
".--. -.-- - .... --- -." | "python" |
💡 2. 접근방식
주어진 모스부호를 morse.put() 으로 한 줄씩 해시맵에 추가 해야 한다는 부분이 귀찮은 문제이다.
1. HashMap을 이용해 모스부호와 알파벳을 키,값 쌍으로 저장하기
2. split() 메서드로 문자열을 공백 기준으로 나누기
3. StringBuilder로 문자열을 조합해서 반환
⭐ 3. 정답코드
import java.util.*;
class Solution {
public String solution(String letter) {
Map<String, String> morse = new HashMap<>();
// 모스 부호 매핑
morse.put(".-", "a"); morse.put("-...", "b");
morse.put("-.-.", "c"); morse.put("-..", "d");
morse.put(".", "e"); morse.put("..-.", "f");
morse.put("--.", "g"); morse.put("....", "h");
morse.put("..", "i"); morse.put(".---", "j");
morse.put("-.-", "k"); morse.put(".-..", "l");
morse.put("--", "m"); morse.put("-.", "n");
morse.put("---", "o"); morse.put(".--.", "p");
morse.put("--.-", "q"); morse.put(".-.", "r");
morse.put("...", "s"); morse.put("-", "t");
morse.put("..-", "u"); morse.put("...-", "v");
morse.put(".--", "w"); morse.put("-..-", "x");
morse.put("-.--", "y"); morse.put("--..", "z");
// 공백 기준으로 나누기
String[] words = letter.split(" ");
// 문자 조합
StringBuilder sb = new StringBuilder();
for (String word : words ) {
sb.append(morse.get(word));
}
return sb.toString();
}
}
👏🏻 더 간단한 코드
import java.util.*;
public class MorseDecoder {
public static String solution(String letter) {
Map<String, String> 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")
);
return Arrays.stream(letter.split(" "))
.map(morse::get)
.reduce("", String::concat);
}
public static void main(String[] args) {
System.out.println(solution(".... . .-.. .-.. ---")); // hello
}
}
내가 푼 코드를 이렇게 한 줄로 쓸 수 있는 방법이 있다.
return Arrays.stream(letter.split(" ")).map(morse::get).reduce("", String::concat);
- `letter.split(" ")` 모스부호 문자열을 공백 기준으로 나누기
- `Arrays.stream(...)` 배열을 스트림(Stream)으로 변환하기
- `.map(morse::get)` 각 모스부호를 영어 알파벳으로 변환하기
- `.reduce("", String::concat)` 변환된 알파벳들을 하나의 문자열로 합치기
'Algorithm > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 구슬을 나누는 경우의 수 문제풀이 (14) | 2025.03.23 |
---|---|
[프로그래머스] (Java) 가위 바위 보, 머쓱이보다 키 큰 사람, 점의 위치 구하기 문제풀이 (7) | 2025.03.21 |
[프로그래머스] (Java) 개미군단 (9) | 2025.03.18 |
[프로그래머스] (Java) 순서쌍의 개수 문제풀이 (7) | 2025.03.18 |
[프로그래머스] (Java) 진료순서 정하기 (HashMap) 문제풀이 (4) | 2025.03.17 |
📑 1. 문제설명

입출력 예
letter | result |
".... . .-.. .-.. ---" | "hello" |
".--. -.-- - .... --- -." | "python" |
💡 2. 접근방식
주어진 모스부호를 morse.put() 으로 한 줄씩 해시맵에 추가 해야 한다는 부분이 귀찮은 문제이다.
1. HashMap을 이용해 모스부호와 알파벳을 키,값 쌍으로 저장하기
2. split() 메서드로 문자열을 공백 기준으로 나누기
3. StringBuilder로 문자열을 조합해서 반환
⭐ 3. 정답코드
import java.util.*; class Solution { public String solution(String letter) { Map<String, String> morse = new HashMap<>(); // 모스 부호 매핑 morse.put(".-", "a"); morse.put("-...", "b"); morse.put("-.-.", "c"); morse.put("-..", "d"); morse.put(".", "e"); morse.put("..-.", "f"); morse.put("--.", "g"); morse.put("....", "h"); morse.put("..", "i"); morse.put(".---", "j"); morse.put("-.-", "k"); morse.put(".-..", "l"); morse.put("--", "m"); morse.put("-.", "n"); morse.put("---", "o"); morse.put(".--.", "p"); morse.put("--.-", "q"); morse.put(".-.", "r"); morse.put("...", "s"); morse.put("-", "t"); morse.put("..-", "u"); morse.put("...-", "v"); morse.put(".--", "w"); morse.put("-..-", "x"); morse.put("-.--", "y"); morse.put("--..", "z"); // 공백 기준으로 나누기 String[] words = letter.split(" "); // 문자 조합 StringBuilder sb = new StringBuilder(); for (String word : words ) { sb.append(morse.get(word)); } return sb.toString(); } }
👏🏻 더 간단한 코드
import java.util.*; public class MorseDecoder { public static String solution(String letter) { Map<String, String> 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") ); return Arrays.stream(letter.split(" ")) .map(morse::get) .reduce("", String::concat); } public static void main(String[] args) { System.out.println(solution(".... . .-.. .-.. ---")); // hello } }
내가 푼 코드를 이렇게 한 줄로 쓸 수 있는 방법이 있다.
return Arrays.stream(letter.split(" ")).map(morse::get).reduce("", String::concat);
letter.split(" ")
모스부호 문자열을 공백 기준으로 나누기Arrays.stream(...)
배열을 스트림(Stream)으로 변환하기.map(morse::get)
각 모스부호를 영어 알파벳으로 변환하기.reduce("", String::concat)
변환된 알파벳들을 하나의 문자열로 합치기
'Algorithm > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 구슬을 나누는 경우의 수 문제풀이 (14) | 2025.03.23 |
---|---|
[프로그래머스] (Java) 가위 바위 보, 머쓱이보다 키 큰 사람, 점의 위치 구하기 문제풀이 (7) | 2025.03.21 |
[프로그래머스] (Java) 개미군단 (9) | 2025.03.18 |
[프로그래머스] (Java) 순서쌍의 개수 문제풀이 (7) | 2025.03.18 |
[프로그래머스] (Java) 진료순서 정하기 (HashMap) 문제풀이 (4) | 2025.03.17 |