반응형
https://www.acmicpc.net/problem/29701
<백준 문제 풀이 시 유의점>
- classs명은 반드시 Main 이어야 한다.
- main문 자체가 static 함수이므로 거기서 사용하는 전역변수 및 모든 함수 또한 static이어야 한다.
- 입출력 속도를 위해 BufferedReader, BufferedWriter 를 사용한다.
- BufferedReader 사용하려면 main클래스에 throws IOException을 추가한다.
- Main 이외의 클래스를 추가로 쓰고싶다면 public이 아닌 클래스 혹은 Inner 클래스를 쓰면 된다.
- 한 줄에 여러 데이터가 입력받는 경우가 종종 있는데 StringTokenizer를 이용해서 각 데이터를 분할하고 취득하자.
아래의 블로그 링크를 참고하면 도움이 많이 된다.
feat. 99클럽장 동찬님 블로그
https://dong-chan.com/codingtest-intro/
1) 내가 구현한 코드
- 입출력이 제대로 되는지 확인하기 위해 System.out.println 을 찍으면서 값을 확인했다... 디버깅 쓸껄..
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class Main {
static Map<String, String> morseMap = new HashMap<>();
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()); //ex.5
// System.out.println("N : "+N);
// 둘째 줄: 모스 부호 입력
String[] morseCode = br.readLine().split(" "); //ex. .... . .-.. .-.. ---
// System.out.println("morseCode : "+morseCode[0]);
initMorseMap(); // 모스 부호 매핑 초기화
StringBuilder result = new StringBuilder();
for (String code : morseCode) {// 모스 부호 해독
result.append(morseMap.get(code));
}
// 해독한 문자열 출력
bw.write(result.toString());
bw.flush();
// 자원 해제
br.close();
bw.close();
}
// 모스 부호와 알파벳, 숫자, 기호를 매핑하는 함수
static void initMorseMap() {
morseMap.put(".-", "A"); morseMap.put("-...", "B");
morseMap.put("-.-.", "C"); morseMap.put("-..", "D");
morseMap.put(".", "E"); morseMap.put("..-.", "F");
morseMap.put("--.", "G"); morseMap.put("....", "H");
morseMap.put("..", "I"); morseMap.put(".---", "J");
morseMap.put("-.-", "K"); morseMap.put(".-..", "L");
morseMap.put("--", "M"); morseMap.put("-.", "N");
morseMap.put("---", "O"); morseMap.put(".--.", "P");
morseMap.put("--.-", "Q"); morseMap.put(".-.", "R");
morseMap.put("...", "S"); morseMap.put("-", "T");
morseMap.put("..-", "U"); morseMap.put("...-", "V");
morseMap.put(".--", "W"); morseMap.put("-..-", "X");
morseMap.put("-.--", "Y"); morseMap.put("--..", "Z");
morseMap.put(".----", "1"); morseMap.put("..---", "2");
morseMap.put("...--", "3"); morseMap.put("....-", "4");
morseMap.put(".....", "5"); morseMap.put("-....", "6");
morseMap.put("--...", "7"); morseMap.put("---..", "8");
morseMap.put("----.", "9"); morseMap.put("-----", "0");
morseMap.put("--..--", ","); morseMap.put(".-.-.-", ".");
morseMap.put("..--..", "?"); morseMap.put("---...", ":");
morseMap.put("-....-", "-"); morseMap.put(".--.-.", "@");
}
}
2) 오늘의 학습 키워드
- BufferedReader와 BufferedWriter 사용법
- 해시맵을 이용한 모스 부호 변환
- 문자열을 효율적으로 처리하는 방법
3) 공부한 내용 정리
이번 문제는 모스 부호를 해독하여 주어진 문자열을 원래 형태로 복원하는 과제였다.
Java에서는 BufferedReader와 BufferedWriter를 활용해 입력과 출력을 최적화할 수 있으며,
HashMap을 통해 문자와 모스 부호 간 매핑을 구현할 수 있다.
4) 문제 해결 과정
- 모스 부호 매핑 테이블 초기화:
- 각 문자와 모스 부호의 쌍을 HashMap에 저장해 두어, 문자열을 해독할 때 빠르게 참조할 수 있도록 한다.
- 입출력 최적화:
- BufferedReader를 사용해 입력을 처리하고, BufferedWriter를 통해 결과를 출력하여 입출력 성능을 높인다.
- 모스 부호 해독:
- 입력된 모스 부호 문자열을 공백을 기준으로 분리하고, 분리된 각 모스 부호를 HashMap을 통해 해독한 뒤 결과를 출력한다.
5) 오늘의 회고
- 문제점
- 처음에는 단순히 Scanner와 System.out을 사용해 접근했지만,
- 입력이 많아질 경우 입출력 효율이 낮다는 문제점이 있었다.
- 시도한 방법
- BufferedReader와 BufferedWriter를 활용해 입출력 속도를 개선했고,
- HashMap을 사용해 모스 부호 해독을 빠르게 수행할 수 있었다.
- 새롭게 알게 된 점
- BufferedReader와 BufferedWriter의 활용이 입출력에서 큰 성능 차이를 낼 수 있다는 점을 확인할 수 있었고,
- HashMap을 통한 문자 매핑의 간결성을 다시금 이해했다.
- 내일 학습 목표
- 이와 같은 문자열 매핑 문제를 다양한 입출력 방식으로 해결하는 방법을 추가로 연습할 계획이다.
6) 추가 문제
미들러 - 너비 우선 탐색1
https://www.acmicpc.net/problem/24444
챌린저 - 공주님의 정원
반응형
'coding_test' 카테고리의 다른 글
자바의 List 객체와 String 배열의 차이 및 출력하는법 (0) | 2024.11.02 |
---|---|
[99클럽 4기 코테 스터디 TIL 6일차] 할리갈리 (feat. 해시맵, BufferedReader, Bufferedwriter, HashMap.containsValue()) (0) | 2024.11.02 |
[99클럽 4기 코테 스터디 TIL 4일차 보너스문제] 의상 (feat. 해시맵) (1) | 2024.10.31 |
[99클럽 4기 코테 스터디 TIL 4일차] 숫자 문자열과 영단어 (0) | 2024.10.31 |
[99클럽 4기 코테 스터디 TIL 3일차] 문자열 나누기 (0) | 2024.10.30 |