알고리즘/프로그래머스 1단계

프로그래머스 - 모스부호(1) - C++

게임만드는학생 2023. 9. 3. 12:17

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

string solution(string letter) {
    string answer = "";
    string arr[26] = { ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.." };

    string im = "";
    for (int i = 0; i < letter.length(); i++)
    {
        if (letter[i] == ' ')
        {
            for (int j = 0; j < 26; j++)
            {
                if (im == arr[j])
                {
                    answer += ('a' + j);
                    im = "";
                }
                
            }
        }
        else
        {
            im += letter[i];
        }
    }
   for (int j = 0; j < 26; j++)
            {
                if (im == arr[j])
                {
                    answer += ('a' + j);
                    im = "";
                }
                
            }
    return answer;
}

 

설명

주어진 letter 문자를 주어진 (모스부호: 알파벳) 을 이용해 알파벳 소문자의 문자열로 바꾸는 문제이다. 

 

모스부호를 string 배열 arr 에 저장해놓는다. 

for문을 돌면서 letter[i] 가 ' ' 즉, 공백일 때까지 im 문자열에 letter[i] 를 더한다. 

공백이 나오면 im문자열이랑 같은 문자열을 arr 문자열 배열에서 찾는다. 

해당하는 알파벳을 더한다.

answer += ('a' + j);

이 코드는 아스키코드를 이용한 것인데 예를들어, 모스부호가 b를 나타냈다면 j는 1일 것이다. 

'a' 의 아스키코드가 97 이고 'b' 는 98 이다. 따라서 97 + 1 로 b가 answer 에 더해지게 된다.