본문 바로가기
프로그래머스 문제풀어보기

[Lv.0] 모스부호(1)

by dantriss 2023. 3. 3.


https://school.programmers.co.kr/learn/courses/30/lessons/120838

 

보자마자 당황했다.

이런?걸 보면 신기하면서도 재밌을꺼 같긴한데 어떻게 해야할지 몰라서 한참을 고민해보았다.

 

우선 String 배열에 morse라는 변수명으로 모스부호들을 선언해준다.

문자열 letter는 공백으로 나누어져 있다고 했기에 String배열 letterArr에 letter를 띄어쓰기 기준으로 나눠서 넣어준다

이중 for문을 사용하자 이중for문을 사용할 땐 안에 for문에 어떤걸 먼저 넣어야할지 생각해보자

안에 있는 for문에는 letterArr와 morse를 비교해서 일치하다면 어떠한 처리를 하면 될 것이다.

if문에서 letterArr[i] 번째 문자와 morse[j]번째 문자가 같다면 리턴해줄 answer에 문자 'a'+j를 넣어주면 될 것이다.

 

예를 들어보며 생각해보자 letterArr[0] 번째 문자가 morese[0]번째 문자와 같다면 morse는 문자 'a' 부터 'z'까지 순서대로 있으니

문자a의 아스키 코드인 97+0을한 값인 97이 나오고 그에 해당하는 문자인 a일 것이다.

그럼 만약 letterArr[1] 번째 문자가 morese[15]번째 문자와 같다면? 문자 a에 해당하는 97에 15를 더한 122가 출력이 될 것이다.

 

그렇다면 아스키코드 122에 해당하는 문자가 나올 것이다.

 

이렇게 morse에 a-z에 해당하는 모스코드를 순서대로 넣어놨기 때문에 아스키코드를 활용해 문제를 해결할 수 있다.

이제 밖에 있는 for문은 내가 해결할 문자의 길이만큼 반복해주면 된다.

 

위와 같이 하나하나 비교하면서 j가 7번째일 때 일치했고 a부터 7번째 글자인 h가 출력이 되었다.

이렇게 letterArr의 길이만큼 반복하면서 비교하며 일치한 모스부호들의 자리순서 j만큼 문자 a(아스키코드 97)에 더해져서

나온 글자들을 answer에 추가하면서 문제를 해결할 수 있다.

 

import java.util.*;
class Solution {
    public String solution(String letter) {
        String answer = "";
        String[] morse = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", " "};
        
        String[] letterArr = letter.split(" ");    
    
        
            for(int i =0; i<letterArr.length; i++){
                for(int j =0; j<morse.length; j++){

                    if(letterArr[i].equals(morse[j])){
                        answer += (char)('a'+j);  

                    }
                }
            }
             return answer;
        }        
    }

'프로그래머스 문제풀어보기' 카테고리의 다른 글

[Lv.0] A로 B 만들기  (0) 2023.03.06
[Lv.0] A로 B 만들기  (0) 2023.03.06
[Lv.0] 문자열 정렬하기(2)  (0) 2023.03.02
[Lv.0] 369게임  (0) 2023.03.02
[Lv.0] 약수 구하기  (0) 2023.03.02

댓글