모스부호 문제를 보자마자 든 생각. 아.. 귀찮다..
java에서 모스부호로 변환해주는 내장 메서드 같은 건 없을까? → 없었음
별의 별게 다 있던데 왜 없지? → 모스 부호는 특정 응용 분야에서만 다루는 내용이기 때문에… 아니 사실 암호를 변환해주는 메소드가 있으면 안되긴 하지.. 아무리 유명한 암호라고 해도ㅠㅠㅋㅋ
어쨌든 문제로 다시 돌아가서…
모스 부호로 작성된 문자열을 입력받아 해당 부호를 영어 알파벳이나 숫자로 변환하는 기능을 구현
문제는 정말 간단하다. 그냥 단순히 map에 하나씩 넣는 과정이 괴로울 뿐 🥲
import java.io.*;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String input = br.readLine();
String[] arr = input.split(" ");
HashMap<String, Character> morseToChar = new HashMap<>();
morseToChar.put(".-", 'A');
morseToChar.put("-...", 'B');
morseToChar.put("-.-.", 'C');
morseToChar.put("-..", 'D');
morseToChar.put(".", 'E');
morseToChar.put("..-.", 'F');
morseToChar.put("--.", 'G');
morseToChar.put("....", 'H');
morseToChar.put("..", 'I');
morseToChar.put(".---", 'J');
morseToChar.put("-.-", 'K');
morseToChar.put(".-..", 'L');
morseToChar.put("--", 'M');
morseToChar.put("-.", 'N');
morseToChar.put("---", 'O');
morseToChar.put(".--.", 'P');
morseToChar.put("--.-", 'Q');
morseToChar.put(".-.", 'R');
morseToChar.put("...", 'S');
morseToChar.put("-", 'T');
morseToChar.put("..-", 'U');
morseToChar.put("...-", 'V');
morseToChar.put(".--", 'W');
morseToChar.put("-..-", 'X');
morseToChar.put("-.--", 'Y');
morseToChar.put("--..", 'Z');
morseToChar.put(".----", '1');
morseToChar.put("..---", '2');
morseToChar.put("...--", '3');
morseToChar.put("....-", '4');
morseToChar.put(".....", '5');
morseToChar.put("-....", '6');
morseToChar.put("--...", '7');
morseToChar.put("---..", '8');
morseToChar.put("----.", '9');
morseToChar.put("-----", '0');
morseToChar.put("--..--", ',');
morseToChar.put(".-.-.-", '.');
morseToChar.put("..--..", '?');
morseToChar.put("---...", ':');
morseToChar.put("-....-", '-');
morseToChar.put(".--.-.", '@');
StringBuilder sb = new StringBuilder();
for(String str : arr){
sb.append(morseToChar.get(str));
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
오늘 문제는 HashMap의 사용법만 정확히 알면 쉽게 풀리는 문제였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "-----", "--..--", ".-.-.-", "..--..", "---...", "-....-", ".--.-."};
String[] ans = {"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", ",", ".", "?", ":", "-", "@"};
br.readLine();
StringBuilder sb = new StringBuilder();
for(String str : br.readLine().split(" ")) {
for(int i = 0; i < s.length; i++) {
if(s[i].equals(str)) {
sb.append(ans[i]);
break;
}
}
}
System.out.print(sb);
}
}
프로그래머스 문제들만 풀어보다가 백준 풀어보려니까 조금 당황스러웠다. 입력받는 부분을 내가 직접 구현해줘야한다.
백준에선 실행시간도 중요하기 때문에 초과하지 않도록 유의해가며 문제를 풀어야한다.
📌 Scanner 대신 BufferedReader를
📌 print문 대신 BufferedWriter를 사용해야 시간이 단축된다.
내 코드로 확인 했을 땐 대략 2배정도 빨랐는데 보통 3-4배까지도 빠르다고 한다.