프로그래머스

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

chojdsj 2023. 11. 29. 17:55
728x90

 

 

 

 

 

문제 설명

 

 

 

 

 

 

 

 

 

정답

 

import java.util.*;

class Solution {
    public String solution(String letter) {
        String answer = "";
        
        String [] morse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        
        Map<String, Character> morseMap = new HashMap<>();
        
        for(char i='a'; i<='z'; i++){
            int index = i - 'a'; // a의 ASCII값 빼주면서 morse배열 인덱스 값 만들기
            morseMap.put(morse[index], i); // 각각의 모스부호와 알파벳 순서대로 Map에 넣어주기
        }
        
        String [] letters = letter.split(" "); // letter 공백으로 구분해서 배열에 넣어주기
        
        for(int i=0; i<letters.length; i++){
            // letters배열에 값이 morseMap의 키값과 일치한다면
            if(morseMap.containsKey(letters[i])){
                // answer에 morseMap의 키값의 value값을 넣어준다.
                answer += morseMap.get(letters[i]);
            }
        }
        
        
        
        
        return answer;
    }
}

 

 

 

먼저 morse 배열에 모스부호 배열을 넣어준다.

 

그리고 각각의 모스부호와 알파벳이 일치하도록 Map을 만들고 그 안에 각각 일치하게 넣어준다.

 

for문을 문자열로 돌려서 i를 value값으로 주었다.

 

index값은 morse배열의 인덱스값을 얻기위해 필요했는데, i=='a', 즉 ASCII코드값으로는 97이다.

 

배열의 첫번째 인덱스값은 0이기 때문에 i - 'a'를 해주어서 morse배열의 인덱스값(모스부호)을 morseMap의 Key값으로 넣어주었다.

 

그 다음부터 i는 b,c,d....z까지 순차적으로 올라간다. 그러므로 index값도 0,1,2,3..... 계속 올라간다.

 

 

 

 

그러고 나서 매개변수 letter를 공백을 기준으로 나누어서 letters배열에 따로 담아준다.

 

이제 for문을 이용해서 공백을 기준으로 나눈 각각의 letters 인덱스값(매개변수로 주어진 모스부호)들이 morseMap의 Key값(모스부호)과 일치한다면 answer에 그 일치하는 Key값에 대한 value값(알파벳)을 넣어준다.