728x90
반응형
오늘의 학습 키워드
해시
과제
혜민이는 요즘 모스 부호에 관심이 많아졌다. 모스 부호는 짧은 신호와 긴 신호를 적절히 조합하여 문자 기호를 표기하는 방식이다. 각 문자를 나타내는 방식은 미리 정해져 있는데, 예를 들어, 짧은 신호를 '.', 긴 신호를 '-'로 나타낸다면, 모스 부호로 알파벳 'A'는 '.-', 숫자 1은 '.----'와 같이 표기할 수 있다. 모스 부호를 알고 있으면 위험한 상황에서 구조 요청을 하는 데 유용할 것 같아, 혜민이는 평상시에 친구들과 연락을 주고받을 때도 모스 부호를 사용하려고 한다. 혜민이는 친구들이 보내온 모스 부호를 올바르게 해독했는지 바로바로 확인하고 싶어졌다. 알파벳 A-Z, 숫자 0-9, 기호 ',', '.', '?', ':', '-', '@'로 이루어진 길이 N$N$인 문자열을 변환한 모스 부호가 주어질 때, 주어진 모스 부호를 해독하여 원래의 문자열을 출력하는 프로그램을 작성해 보자.
각 문자를 모스 부호로 나타내는 방법은 아래 표에 정리되어 있다. (단, 표의 둘째, 넷째 열은 첫째, 셋째 열의 문자를 모스 부호로 변환한 결과를 나타내며, '.'는 짧은 신호를, '-'는 긴 신호를 의미한다.)
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 | --.. |
1 | .---- | 2 | ..--- |
3 | ...-- | 4 | ....- |
5 | ..... | 6 | -.... |
7 | --... | 8 | ---.. |
9 | ----. | 0 | ----- |
, | --..-- | . | .-.-.- |
? | ..--.. | : | ---... |
- | -....- | @ | .--.-. |
풀이 과정
- 입력으로 들어온 문자열의 최대 길이까지 while문으로 반복
- 현재 문자가 isdigit()를 이용하여 숫자인지 확인하고 숫자이면 그대로 answer에 추가
- 아닐 경우 number 딕셔너리의 각 키(key)를 순회
- 현재 위치부터 시작하는 부분 문자열이 해당 단어로 시작하는지 확인 후 단어가 있을 경우 answer에 추가
제출 코드 (python)
morse_code = {
".-": "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",
".----": "1",
"..---": "2",
"...--": "3",
"....-": "4",
".....": "5",
"-....": "6",
"--...": "7",
"---..": "8",
"----.": "9",
"-----": "0",
"--..--": ",",
".-.-.-": ".",
"..--..": "?",
"---...": ":",
"-....-": "-",
".--.-.": "@",
}
N = int(input())
morse = input().split()
result = ""
for i in range(N):
result += morse_code[morse[i]]
print(result)
다른 언어로 문제 풀기
GO 언어
package main
import (
"bufio"
"fmt"
)
func main() {
morseCode := map[string]string{
".-": "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",
".----": "1",
"..---": "2",
"...--": "3",
"....-": "4",
".....": "5",
"-....": "6",
"--...": "7",
"---..": "8",
"----.": "9",
"-----": "0",
"--..--": ",",
".-.-.-": ".",
"..--..": "?",
"---...": ":",
"-....-": "-",
".--.-.": "@",
}
var N int
fmt.Scan(&N)
scanner := bufio.NewScanner(bufio.NewReader(stdin))
scanner.Scan()
morse := strings.Fields(scanner.Text())
result := ""
for i := 0; i < N; i++ {
result += morseCode[morse[i]]
}
fmt.Println(result)
}
C++
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <vector>
using namespace std;
int main() {
map<string, string> morseCode = {
{".-", "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"},
{".----", "1"},
{"..---", "2"},
{"...--", "3"},
{"....-", "4"},
{".....", "5"},
{"-....", "6"},
{"--...", "7"},
{"---..", "8"},
{"----.", "9"},
{"-----", "0"},
{"--..--", ","},
{".-.-.-", "."},
{"..--..", "?"},
{"---...", ":"},
{"-....-", "-"},
{".--.-.", "@"}
};
int N;
cin >> N;
cin.ignore(); // 버퍼 비우기
string line;
getline(cin, line);
stringstream ss(line);
vector<string> morse;
string temp;
while (ss >> temp) {
morse.push_back(temp);
}
string result = "";
for (int i = 0; i < N; i++) {
result += morseCode[morse[i]];
}
cout << result << endl;
return 0;
}
오늘의 회고
- 어제와 비슷한 문제를 풀다 보니 이해도 되고 쉬웠다!
728x90
'항해 99클럽 코테' 카테고리의 다른 글
99클럽 코테 스터디 7일차 TIL (3) | 2024.11.03 |
---|---|
99클럽 코테 스터디 6일차 TIL (1) | 2024.11.02 |
99클럽 코테 스터디 4일차 TIL (1) | 2024.10.31 |
99클럽 코테 스터디 3일차 TIL (0) | 2024.10.30 |
99클럽 코테 스터디 2일차 TIL (0) | 2024.10.29 |