백준 I Speak TXTMSG

KIMYEONGJUN·2025년 9월 20일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

The user will be prompted to enter text to be translated one line at a time.
When the short form “TTYL” is entered, the program ends.
Users may enter text that is found in the translation table, or they may enter other words.
All entered text will be symbols or upper case letters.
There will be no spaces and no quotation marks.

The program will output text immediately after each line of input.
If the input is one of the phrases in the translation table, the output will be the translation; if the input does not appear in the table, the output will be the original word.
The translation of the last short form entered “TTYL” should be output.

내가 이 문제를 보고 생각해본 부분

import java.io.BufferedReader;
BufferedReader 클래스를 임포트한다. 
이 클래스는 입력을 효율적으로 읽어들이는 데 사용된다. 
특히 한 줄씩 읽는 데 유용하다.
import java.io.IOException;
IOException 클래스를 임포트한다. 
입출력 작업 중에 발생할 수 있는 예외를 처리하기 위해 필요하다.
import java.io.InputStreamReader;
InputStreamReader 클래스를 임포트한다. 
바이트 스트림(System.in)을 문자 스트림으로 변환하여 BufferedReader가 문자를 읽을 수 있도록 해준다.
import java.util.HashMap;
HashMap 클래스를 임포트한다. 
줄임말(Short Form)과 그에 해당하는 번역어(Translation)를 효율적으로 저장하고 검색하기 위해 사용한다. 
Map 인터페이스의 구현체이다.
import java.util.Map;
Map 인터페이스를 임포트한다. 
HashMap을 선언할 때 Map 인터페이스 타입을 사용하는 것은 좋은 습관이다.
public class Main1151 { ... }
문제 해결을 위한 메인 클래스이다.
public static void main(String[] args) throws IOException { ... }
모든 자바 프로그램의 시작점이다.
throws IOException은 이 메서드 안에서 IOException이 발생할 수 있음을 컴파일러에게 알려준다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader 객체를 생성하여 표준 입력(System.in)으로부터 데이터를 읽을 준비를 한다. 
InputStreamReader를 통해 바이트를 문자로 변환하여 읽게 된다.
Map<String, String> translationTable = new HashMap<>();
String 타입의 키(줄임말)와 String 타입의 값(번역어)을 저장하는 HashMap translationTable을 생성한다. 
이 맵에 문제에서 주어진 번역 테이블의 모든 항목을 추가할 것이다.
translationTable.put("CU", "see you"); (외 여러 put 문)
put() 메서드를 사용하여 HashMap에 줄임말과 번역어를 쌍으로 저장한다. 
예를 들어, translationTable.put("CU", "see you");는 "CU"라는 키에 "see you"라는 값을 매핑한다.
주의 깊게 보실 부분은 I’m happy, I’m unhappy, you’re welcome에 사용된 ' (작은따옴표) 문자이다. 
이 문자는 일반적인 어포스트로피(')가 아니라 유니코드 문자 ’ (오른쪽 작은 따옴표, U+2019)이다. 
백준에서 채점 시 이 작은 차이로 오답 처리될 수 있으므로, 문제의 예시 출력을 그대로 복사해서 사용하는 것이 가장 정확하다.
while (true) { ... }
무한 루프를 시작한다. 
입력이 "TTYL"이 될 때까지 계속해서 입력을 받고 처리하게 된다.
inputLine = br.readLine();
BufferedReader의 readLine() 메서드를 사용하여 사용자로부터 한 줄을 입력받아 inputLine 변수에 저장한다.
System.out.println(translationTable.getOrDefault(inputLine, inputLine));
translationTable.getOrDefault(inputLine, inputLine): getOrDefault() 메서드는 inputLine이 translationTable의 키로 존재하면, 해당 키에 매핑된 값(번역어)을 반환한다. 
만약 inputLine이 translationTable에 없으면, 두 번째 인자로 전달된 inputLine (즉, 원래 입력값)을 반환한다.
System.out.println(): 이 메서드가 반환한 값을 화면에 출력한다.
if(inputLine.equals("TTYL")) { break; }
inputLine이 "TTYL"과 정확히 일치하면 break 문을 실행하여 while 루프를 종료시킨다. 
"TTYL"도 번역되어 출력된 후 종료된다.
br.close();
입력 스트림 사용이 끝난 후에는 BufferedReader를 닫아 리소스를 해제한다.

코드로 구현

package baekjoon.baekjoon_30;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

// 백준 6841번 문제
public class Main1151 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 번역 테이블을 저장할 Map 생성
        Map<String, String> translationTable = new HashMap<>();
        translationTable.put("CU", "see you");
        translationTable.put(":-)", "I’m happy"); // 스마트 어포스트로피(’ U+2019) 사용
        translationTable.put(":-(", "I’m unhappy"); // 스마트 어포스트로피(’ U+2019) 사용
        translationTable.put(";-)", "wink");
        translationTable.put(":-P", "stick out my tongue");
        translationTable.put("(~.~)", "sleepy");
        translationTable.put("TA", "totally awesome");
        translationTable.put("CCC", "Canadian Computing Competition");
        translationTable.put("CUZ", "because");
        translationTable.put("TY", "thank-you");
        translationTable.put("YW", "you’re welcome"); // 스마트 어포스트로피(’ U+2019) 사용
        translationTable.put("TTYL", "talk to you later");

        String inputLine;
        while (true) { // 무한 루프를 사용하여 입력 처리
            inputLine = br.readLine(); // 한 줄씩 입력 받기

            // 입력된 줄임말이 번역 테이블에 있는지 확인하고 번역 또는 원본 출력
            // getOrDefault(key, defaultValue)는 key가 있으면 value를 반환하고, 없으면 defaultValue를 반환합니다.
            System.out.println(translationTable.getOrDefault(inputLine, inputLine));

            // TTYL이 입력되면 프로그램 종료
            if (inputLine.equals("TTYL")) {
                break;
            }
        }

        br.close(); // BufferedReader 닫기
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글