본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 모스부호 (1)

728x90

코드 힌트

문제 이해:

  • 입력으로 Morse 코드로 인코딩된 문자열이 주어집니다. 이를 알파벳으로 변환해야 합니다. Morse 코드는 공백으로 구분된 문자열로 제공되며, 각 Morse 코드가 대응하는 알파벳으로 변환되어야 합니다.

HashMap 사용:

  • 다른 자료구조를 사용할 수도 있지만, HashMap을 연습하기에 좋은 문제입니다. HashMap은 데이터를 키-값 쌍으로 저장할 수 있는 데이터 구조입니다. 이 문제에서는 Morse 코드 문자열을 로, 대응하는 알파벳을 으로 저장하면 변환 작업을 빠르게 수행할 수 있습니다.
  • HashMap을 사용하면 Morse 코드에서 알파벳을 찾는 과정이 빠르고 효율적이므로, HashMap 사용을 강력히 추천합니다.

HashMap에 저장할 Morse 코드 배열:

String[] morseArr = {
    ".- 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"
};
  • 이 배열은 Morse 코드와 알파벳의 매핑을 제공합니다. 각 요소는 Morse 코드와 대응하는 알파벳을 공백으로 구분하여 저장하고 있습니다. 이 배열을 사용하여 HashMap을 초기화합니다.

Morse 코드와 알파벳 매핑:

  • 먼저, morseArr 배열을 통해 Morse 코드와 알파벳의 매핑을 HashMap에 저장합니다. 배열에서 Morse 코드와 알파벳 쌍을 읽어와서 map.put(key, value)로 저장합니다. 이렇게 하면 Morse 코드에 대한 빠른 검색이 가능해집니다.

Morse 코드 변환:

  • 입력된 Morse 코드 문자열을 공백으로 나누어 각 Morse 코드 부분을 처리합니다. 각 Morse 코드를 HashMap에서 검색하여 대응하는 알파벳을 찾고, 이를 결과 문자열에 추가합니다.

StringBuilder 사용:

  • 최종 결과 문자열을 만들기 위해 StringBuilder를 사용합니다. 문자열을 반복적으로 수정할 때 StringBuilder는 효율적이며, 성능 상 유리합니다. sb.append(map.get(s))를 사용하여 변환된 알파벳을 결과 문자열에 추가합니다.

 

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public String solution(String letter) {
        // 1. Morse 코드와 알파벳의 매핑을 저장할 HashMap 생성
        HashMap<String, String> map = new HashMap<>();
        
        // 2. 결과 문자열을 저장할 StringBuilder 초기화
        StringBuilder sb = new StringBuilder();
        
        // 3. Morse 코드와 알파벳을 매핑한 배열 정의
        String[] morseArr = {
            ".- 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"
        };
        
        // 4. Morse 코드와 알파벳을 HashMap에 저장
        for (String morse : morseArr) {
            // Morse 코드와 알파벳을 분리
            String[] splitMorse = morse.split(" ");
            String key = splitMorse[0];  // Morse 코드
            String value = splitMorse[1]; // 알파벳
            
            // HashMap에 Morse 코드와 알파벳 매핑 저장
            map.put(key, value);
        }
        
        // 5. 입력된 Morse 코드 문자열을 공백으로 분리하여 처리
        for (String s : letter.split(" ")) {
            // HashMap에서 Morse 코드에 해당하는 알파벳을 찾아 결과 문자열에 추가
            sb.append(map.get(s));
        }
        
        // 6. 최종 결과 문자열 반환
        return sb.toString();
    }
}
728x90