
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에 응원 문구의 개수 T가 주어진다. (1 ≤ T ≤ 100)
두 번째 줄부터 T개의 줄에 걸쳐 학생들이 만든 응원 문구를 나타내는 문자열 S가 주어진다.
주어지는 모든 문자열은 알파벳 대문자로 이루어진 길이 20 이하의 문자열이다.
T개의 줄에 걸쳐 포닉스의 수정을 거친 응원 문구를 한 줄에 하나씩 순서대로 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 준비 및 StringBuilder
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));: System.in (표준 입력 스트림, 키보드 입력 등)으로부터 데이터를 읽어오기 위한 BufferedReader 객체를 생성한다.
StringBuilder sb = new StringBuilder();: 여러 줄의 출력 결과를 한 번에 모아서 출력하기 위해 StringBuilder를 사용한다.
String 객체는 불변(immutable)이어서 문자열을 더할 때마다 새로운 객체를 생성하지만, StringBuilder는 가변(mutable)이어서 문자열 추가/변경 시 성능이 훨씬 좋다.
특히 T가 최대 100이므로, 100개의 문자열을 반복해서 System.out.println하는 것보다 StringBuilder에 추가한 후 한 번에 출력하는 것이 효율적이다.
응원 문구 개수 T 읽기 (Reading T):
int T = Integer.parseInt(br.readLine()); // 응원 문구의 개수 T를 읽는다.
br.readLine(): 표준 입력으로부터 한 줄(첫 줄에는 T가 있습니다)을 읽어 문자열로 반환한다.
Integer.parseInt(): 읽어온 문자열을 정수(int) 타입으로 변환하여 변수 T에 저장한다.
반복 처리 (Looping through T strings):
for (int i = 0; i < T; i++): T번 반복하면서 각 응원 문구를 처리한다.
String S = br.readLine();: 루프를 돌 때마다 다음 응원 문구 문자열 S를 읽어온다.
String modifiedS = S.replace("PO", "PHO");:
String 클래스의 replace(CharSequence target, CharSequence replacement) 메서드를 사용한다.
이 메서드는 호출된 문자열(S) 내에서 target으로 지정된 모든 부분 문자열을 replacement로 지정된 문자열로 교체한 새로운 문자열을 반환한다.
여기서는 target이 "PO"이고, replacement가 "PHO"이므로, S에 있는 모든 "PO"를 "PHO"로 바꾼 결과를 modifiedS에 저장한다.
sb.append(modifiedS).append("\n");: modifiedS (수정된 응원 문구)를 StringBuilder에 추가한다.
append("\n")을 통해 각 응원 문구 뒤에 줄바꿈 문자(새 줄)를 추가하여, 나중에 출력할 때 각 결과가 별도의 줄에 나타나도록 한다.
결과 출력 및 자원 해제 (Output Result and Resource Closing):
System.out.print(sb.toString());: for 루프가 끝난 후, StringBuilder에 저장된 모든 수정된 응원 문구를 toString() 메서드를 통해 하나의 큰 문자열로 만든 다음 System.out.print()로 한 번에 출력한다.
System.out.println()이 아니라 print()를 쓰는 이유는 이미 StringBuilder에 \n이 추가되어 있기 때문이다.
br.close();: BufferedReader 사용이 끝났으므로, 해당 객체를 닫아 운영체제의 입출력 자원을 해제한다.
코드로 구현
package baekjoon.baekjoon_32;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 33950번 문제
public class Main1259 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(); // 효율적인 문자열 출력을 위해 StringBuilder 사용
int T = Integer.parseInt(br.readLine()); // 응원 문구의 개수 T를 읽습니다.
for (int i = 0; i < T; i++) { // T번 반복하여 각 응원 문구를 처리합니다.
String S = br.readLine(); // 응원 문구를 한 줄씩 읽습니다.
// 읽어온 문자열 S에서 "PO"를 "PHO"로 모두 교체합니다.
String modifiedS = S.replace("PO", "PHO");
sb.append(modifiedS).append("\n"); // 수정된 문자열을 StringBuilder에 추가하고 줄바꿈합니다.
}
System.out.print(sb.toString()); // 모든 결과를 한 번에 출력합니다.
br.close(); // BufferedReader를 닫아 자원을 해제합니다.
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.