

출력의 결과가 문자열 전체의 스펠링 순서는 변하지 않고 단어에서의 스펠링 순서가 바뀌는 것을 알 수 있다. 그러므로 단어 단위로 나누거나 띄워쓰기를 만났을 때 초기화를 시켜야 한다고 생각했다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("문장 개수를 입력하세요:");
int T = sc.nextInt();
sc.nextLine();
for (int i = 0; i < T; i++) {
System.out.println("문장을 입력하세요:");
String change_before = sc.nextLine();
String[] words = change_before.split("\\s+");
for (String word : words) {
System.out.print(reverseString(word) + " ");
}
System.out.println();
}
sc.close();
}
int T = sc.nextInt(); 로 숫자를 읽고 줄바꿈 문자를 제거하지 않기 때문에 sc.nextLine(); 을 통해 버퍼에 남아있는 줄바꿈 문자를 읽어서 문자열을 반환하고 예기치 않은 상황을 방지한다.
String[] words = change_before.split("\\s+");
는 change_before 문자열에서 하나 이상의 공백문자를 기준으로 분할하여 각각의 단어로 나누고, 이를 문자열배열인 'words'에 저장한다. 예를들어 change_before이 "my name is tony"라 하면 words[0]=my, words[1]=name, words[2]=is, words[3]=tony 가 저장된다.
for (String word : words) {
System.out.print(reverseString(word) + " ");
}
문자열 배열인 words의 각 요소를 반복적으로 처리하는 구문이다.
따라서 이 구문은 words 배열의 각 요소를 순회하며 각 요소를 순서대로 word 변수에 저장하고, 루프의 각 반복에서 변수 word를 사용하여 처리 작업을 수행한다.
public static String reverseString(String str) {
char[] charArray = str.toCharArray();
//문자열 str을 charArray배열에 문자 단위로 대입
int left = 0;
int right = charArray.length - 1; //문자열을 이루는 갯수 -1
while (left < right) {
char temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
left++;
right--;
}
return new String(charArray);
}
import java.util.Scanner;
public class beak_9093 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("문장 개수를 입력하세요:");
int T = sc.nextInt();
sc.nextLine();
for (int i = 0; i < T; i++) {
System.out.println("문장을 입력하세요:");
String change_before = sc.nextLine();
String[] words = change_before.split("\\s+");
for (String word : words) {
System.out.print(reverseString(word) + " ");
}
System.out.println();
}
sc.close();
}
public static String reverseString(String str) {
char[] charArray = str.toCharArray(); //문자열 str을 charArray배열에 문자 단위로 대입
int left = 0;
int right = charArray.length - 1; //문자열을 이루는 갯수 -1
while (left < right) {
char temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
left++;
right--;
}
return new String(charArray);
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
// BufferedReader와 BufferedWriter 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 문장 개수 입력 받기
int sentenceCount = Integer.parseInt(br.readLine());
// 문장 개수만큼 반복하여 문장 입력받고 뒤집어 출력
for (int i = 0; i < sentenceCount; i++) {
// 문장 입력 받기
String sentence = br.readLine();
// 문장을 단어로 분리하여 뒤집고 출력
StringTokenizer tokenizer = new StringTokenizer(sentence);
while (tokenizer.hasMoreTokens()) {
bw.write(reverseString(tokenizer.nextToken()));
bw.write(" ");
}
bw.newLine(); // 다음 줄로 이동
}
// BufferedWriter 비우고 닫기
bw.flush();
bw.close();
// BufferedReader 닫기
br.close();
}
public static String reverseString(String str) {
// 문자열을 문자 배열로 변환
char[] charArray = str.toCharArray();
// 문자 배열을 뒤집음
int left = 0;
int right = charArray.length - 1;
while (left < right) {
// 왼쪽과 오른쪽 문자를 교환
char temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
// 다음 문자로 이동
left++;
right--;
}
// 뒤집힌 문자 배열을 다시 문자열로 변환하여 반환
return new String(charArray);
}
}