
내가 생각했을때 문제에서 원하는부분
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1000)가 주어진다.
각 테스트 케이스는 다음과 같이 두 줄로 구성되어 있다.
테스트 케이스의 첫째 줄에는 암호화된 메시지가 주어지고,
둘째 줄에는 변환 규칙이 주어진다.
변환 규칙은 알파벳 대문자 26글자로 이루어져있고,
암호회된 메시지의 길이는 100 이하이다.
첫 번째 문자는 A에 해당하는 문자,
두 번째는 B, ..., 26번째는 Z에 해당하는 문자이다.
변환 규칙은 중복되지 않는다.
암호화된 메시지에는 공백이 있을 수 있고,
이것은 원래 메시지에도 포함되어야 한다.
각 테스트 케이스에 대해서 한 줄에 하나씩 원래 메시지를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 입력받는다.
첫 번째 줄에서 테스트 케이스의 개수 T를 읽어온다.
for 루프를 사용하여 T만큼 반복해준다.
각 반복에서 암호화된 메시지(encryptedMessage)와 변환 규칙(transformationRule)을 각각 읽어온다.
빈 StringBuilder(originalMessage)를 생성하여 원래 메시지를 저장할 준비를 한다.
encryptedMessage의 각 문자를 한 글자씩 순회한다.
공백 처리: 문자가 공백(' ')인 경우, 원래 메시지에도 공백을 그대로 추가해준다.
문자 변환:
문자가 공백이 아닌 경우,
해당 문자의 ASCII 값을 이용해 인덱스를 계산한다. (int index = c - 'A')
이 인덱스를 사용하여 transformationRule에서 변환된 문자를 가져와 원래 메시지에 추가한다.
변환이 끝난 원래 메시지를 result라는 또 다른 StringBuilder에 추가하고,
각 메시지 뒤에 줄바꿈 문자를 추가한다.
모든 테스트 케이스가 처리된 후,
result에 저장된 내용을 한 번에 출력한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2703번 문제
public class Main834 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
StringBuilder result = new StringBuilder(); // 결과를 저장할 StringBuilder
for(int i = 0; i < T; i++) {
String encryptedMessage = br.readLine(); // 암호화된 메시지
String transformationRule = br.readLine(); // 변환 규칙
StringBuilder originalMessage = new StringBuilder();
// 변환 규칙을 기반으로 매핑을 생성
for(char c : encryptedMessage.toCharArray()) {
if(c == ' ') {
originalMessage.append(' '); // 공백은 그대로 유지
} else {
// ASCII 코드에서 'A'는 65이므로, 'A'에 해당하는 문자로 변환
int index = c - 'A';
originalMessage.append(transformationRule.charAt(index)); // 변환 규칙에 따라 문자 변환
}
}
result.append(originalMessage.toString()).append("\n"); // 결과 저장
}
System.out.print(result.toString()); // 모든 결과를 한 번에 출력
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.