https://www.acmicpc.net/problem/29701
문제
혜민이는 요즘 모스 부호에 관심이 많아졌다. 모스 부호는 짧은 신호와 긴 신호를 적절히 조합하여 문자 기호를 표기하는 방식이다. 각 문자를 나타내는 방식은 미리 정해져 있는데, 예를 들어, 짧은 신호를 '.', 긴 신호를 '-'로 나타낸다면, 모스 부호로 알파벳 'A'는 '.-', 숫자 1은 '.----'와 같이 표기할 수 있다. 모스 부호를 알고 있으면 위험한 상황에서 구조 요청을 하는 데 유용할 것 같아, 혜민이는 평상시에 친구들과 연락을 주고받을 때도 모스 부호를 사용하려고 한다. 혜민이는 친구들이 보내온 모스 부호를 올바르게 해독했는지 바로바로 확인하고 싶어졌다. 알파벳 A-Z, 숫자 0-9, 기호 ', ', '.', '?', ':', '-', '@'로 이루어진 길이 N인 문자열을 변환한 모스 부호가 주어질 때, 주어진 모스 부호를 해독하여 원래의 문자열을 출력하는 프로그램을 작성해 보자.
각 문자를 모스 부호로 나타내는 방법은 아래 표에 정리되어 있다. (단, 표의 둘째, 넷째 열은 첫째, 셋째 열의 문자를 모스 부호로 변환한 결과를 나타내며, '.'는 짧은 신호를, '-'는 긴 신호를 의미한다.)
해결
문제분석
- 모스부호표가 주어지고 주어진 입력값에 해당하는 모스부호를 매칭시켜 모스부호를 해독하는 문제이다.
문제풀이
- 모스부호표에 있는 값을 검색해야 되므로 모스부호를 저장해야한다. hashMap 자료구조를 이용해 모스부호와 해독값을 key, value 형태로 저장하였다.
- 그럼 다음 입력값을 key로 받아 map을 검색하여 값을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static Map<String, String> makeMorseMap() {
Map<String, String> map = new HashMap<>();
map.put(".-", "A");
map.put("-...", "B");
map.put("-.-.", "C");
map.put("-..", "D");
map.put(".", "E");
map.put("..-.", "F");
map.put("--.", "G");
map.put("....", "H");
map.put("..", "I");
map.put(".---", "J");
map.put("-.-", "K");
map.put(".-..", "L");
map.put("--", "M");
map.put("-.", "N");
map.put("---", "O");
map.put(".--.", "P");
map.put("--.-", "Q");
map.put(".-.", "R");
map.put("...", "S");
map.put("-", "T");
map.put("..-", "U");
map.put("...-", "V");
map.put(".--", "W");
map.put("-..-", "X");
map.put("-.--", "Y");
map.put("--..", "Z");
map.put(".----", "1");
map.put("..---", "2");
map.put("...--", "3");
map.put("....-", "4");
map.put(".....", "5");
map.put("-....", "6");
map.put("--...", "7");
map.put("---..", "8");
map.put("----.", "9");
map.put("-----", "0");
map.put("--..--", ",");
map.put(".-.-.-", ".");
map.put("..--..", "?");
map.put("---...", ":");
map.put("-....-", "-");
map.put(".--.-.", "@");
return map;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
String[] split = br.readLine().split(" ");
Map<String, String> map = makeMorseMap();
StringBuilder s = new StringBuilder();
for (String value : split) {
s.append(map.get(value));
}
System.out.println(s.toString());
}
}
메모리 시간
14248 | 104 |
'코딩테스트 > 백준' 카테고리의 다른 글
[코딩테스트] 백준 17608번 막대기 - JAVA (0) | 2024.11.28 |
---|---|
[코딩테스트] 백준 27160번: 할리갈리 - 자바(JAVA) (0) | 2024.11.16 |
[코딩테스트] 백준 25993번: 근무 지옥에 빠진 푸앙이(small) - 자바(JAVA) (0) | 2024.11.16 |
[코딩테스트] 백준 2605: 줄 세우기 - 자바(JAVA) (0) | 2024.11.16 |
[코딩테스트] 백준 24416 : 알고리즘 수업 - 피보나치 수 1 - 자바 (0) | 2024.11.14 |