각종 문제들

[프로그래머스] 코딩테스트 입문 - 모스부호(1)

hunm719 2023. 4. 12. 21:17

문제 출처 : 프로그래머스

class Solution {
    public String solution(String letter) {
        String letters = letter + " ";
        String answer = "";
        String mose = "";

        for (int i = 0; i < letters.length(); i++) {
            if (letter.charAt(i) == ' ') {
                answer += mosing(mose);
                mose = "";
            }
            else mose += letter.charAt(i);
        }
        return answer;
    }

    private char mosing(String st) {
        if (st ==  ".-") return 'a';
        else if (st ==  "-...") return 'b';
        else if (st ==  "-.-.") return 'c';
        else if (st ==  "-..") return 'd';
        else if (st ==  "..-.") return 'e';
        else if (st ==  "--.") return 'f';
        else if (st ==  "....") return 'g';
        else if (st ==  "..") return 'h';
        else if (st ==  ".---") return 'i';
        else if (st ==  ".") return 'j';
        else if (st ==  "-.-") return 'k';
        else if (st ==  ".-..") return 'l';
        else if (st ==  "--") return 'm';
        else if (st ==  "-.") return 'n';
        else if (st ==  "---") return 'o';
        else if (st == ".--.") return 'p';
        else if (st ==  "--.-") return 'q';
        else if (st ==  ".-.") return 'r';
        else if (st ==  "...") return 's';
        else if (st ==  "-") return 't';
        else if (st==  "..-") return 'u';
        else if (st == "...-") return 'v';
        else if (st ==  ".--") return 'w';
        else if (st ==  "-..-") return 'x';
        else if (st ==  "-.--") return 'y';
        else return 'z';
    }
}

처음 작성한 코드는 위와 같다.

다시 살펴보니 고칠 곳이 정말 많은 것 같다.

 

 

[수정사항]

  • mose 문자열을 초기화 하지 않았기 때문에, 첫 번째 모스 부호 문자열이 올바르게 처리되지 않을 수 있음
  • 문자열 비교에는 == 연산자 보다 equals 연산자를 사용하는 것이 바람직함
  • if 문을 사용하다 보니 코드가 길어짐
  • (모스부호 할 때 모스는 mose 가 아니라 morse임)

 

해당 사항들을 반영한 코드는 아래와 같다.

class Solution {
    public String solution(String letter) {
        String[] words = letter.split(" ");
        StringBuilder result = new StringBuilder();
        for (String word : words) {
            result.append(morseToChar(word));
        }
        return result.toString();
    }

    private static char morseToChar(String morse) {
        switch (morse) {
            case ".-": return 'a';
            case "-...": return 'b';
            case "-.-.": return 'c';
            case "-..": return 'd';
            case ".": return 'e';
            case "..-.": return 'f';
            case "--.": return 'g';
            case "....": return 'h';
            case "..": return 'i';
            case ".---": return 'j';
            case "-.-": return 'k';
            case ".-..": return 'l';
            case "--": return 'm';
            case "-.": return 'n';
            case "---": return 'o';
            case ".--.": return 'p';
            case "--.-": return 'q';
            case ".-.": return 'r';
            case "...": return 's';
            case "-": return 't';
            case "..-": return 'u';
            case "...-": return 'v';
            case ".--": return 'w';
            case "-..-": return 'x';
            case "-.--": return 'y';
            case "--..": return 'z';
            default: return ' ';
        }
    }
}