1.StringBuilder().reverse() 사용
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public ArrayList<String> solution(int n, String[] str) { //string을 원소로 갖음
ArrayList<String> answer=new ArrayList<>();
for (String x : str) {
String tmp=new StringBuilder(x).reverse().toString(); //x라는 단어 reverse하고 다시 String화함
answer.add(tmp); //.add : arraylist에 추가하는 것
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String[] str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = kb.next(); //n개의 단어 입력
}
for (String x: T.solution(n, str)) { //string 담겨있는 arraylist받음
System.out.println(x);
}
}
}
2. 직접 뒤집기
lt, rt 직접 바꾸기
- rt는 1감소
- lt는 1증가
- 반복
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public ArrayList<String> solution(int n, String[] str) { //string을 원소로 갖음
ArrayList<String> answer=new ArrayList<>();
for (String x : str) {
char[]s=x.toCharArray(); //s를 문자배열로 변경(위치 바꾸기 위해)
int lt=0, rt=x.length()-1;
while(lt<rt){
//단어 길이가 홀수인 경우에는 lt,rt가 가운데로 모이게 됨 -> 멈춤
//짝수인 경우에는 lt,rt 위치가 바뀌는 순간 -> 멈춤
char tmp=s[lt];
s[lt]=s[rt]; //값 교환
s[rt]=tmp;
lt++; //lt는 1증가
rt--; //rt는 1감소
}
//배열이 뒤집어진 상태
String tmp=String.valueOf(s); //문자배열을 string화 시켜줌
//valueOf : static으로 선언된 클래스 메서드
answer.add(tmp);
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String[] str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = kb.next(); //n개의 단어 입력
}
for (String x: T.solution(n, str)) { //string 담겨있는 arraylist받음
System.out.println(x);
}
}
}
while(lt<rt) 조건문 거는 이유 : 단어가 짝수일 때 이 조건이 없으면 rt가 lt보다 작아지는 경우가 생겨서
-> 유용하므로 반드시 암기해두기!
'Algorithm > 문제' 카테고리의 다른 글
7. 회문 문자열 (0) | 2023.05.17 |
---|---|
6. 중복 문자 제거 (0) | 2023.05.16 |
5. 특정 문자 뒤집기 (0) | 2023.05.16 |
3.문장 속 단어 (0) | 2023.05.10 |
2.대소문자 변환 (0) | 2023.05.09 |