반응형
SMALL
# 방법 1. StringBuilder(), reverse() 사용
String tmp = new StringBuilder(x).reverse().toString();
=> 각 단어를 StringBuilder를 사용하여 객체로 만들고, reverse() 한 후, 다시 문자열로 만들어준다.
Q> String이 있는데 왜 굳이 StringBuilder를 사용할까?
A> String은 String끼리 더하거나, 추가하거나 변경하면 새로운 객체가 생성되어 변경된다.
하지만 StringBuilder는 문자를 추가하거나 바꾸어도, 처음에 만든 그 객체 하나를 이용한다.
그렇기에 String 연산을 보다 더 편리하게 할 수 있고, 메모리도 절약된다.
* 단점: 이 방법은 한 단어를 특정 조건을 걸어 바꾸는 방법 적용이 불가능하다.
ex> study 단어를 'yduts'로 바꿀 수 있지만, '짝수번째 문자만 바꾸시오' 와 같은 문제는 풀 수 없다.
=> 해결책: toCharArray()를 사용하여 단어를 문자 배열로 바꿔준다.
import java.util.*;
public class Main {
public ArrayList<String> solution(String[] str){
ArrayList<String> answer = new ArrayList<>();
for(String x:str){
String tmp = new StringBuilder(x).reverse().toString();
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();
}
for(String x: T.solution(str)){
System.out.println(x);
}
}
}
# 방법 2. 각 단어를 문자배열로 만들어 그 안에서 교환하는 형식
- lt(문자열의 처음 index), rt(문자열의 끝 index)를 설정하고, lt와 rt를 바꾼다.
- while(lt<rt)인 동안, lt는 ++, rt는 --한다.
* String tmp = String.valueOf(배열)
=> 해당 배열을 다시 문자열로 만들어준다.
import java.util.*;
public class Main {
public ArrayList<String> solution(String[] str){
ArrayList<String> answer = new ArrayList<>();
for(String x:str){
char[] s = x.toCharArray();
int lt=0, rt=x.length()-1;
while(lt<rt){
char tmp=s[lt];
s[lt] = s[rt];
s[rt] = tmp;
lt++; rt--;
}
// 배열을 다시 문자열로 바꾸기
String tmp = String.valueOf(s);
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();
}
for(String x: T.solution(str)){
System.out.println(x);
}
}
}
반응형
LIST
'자바 알고리즘' 카테고리의 다른 글
06. 중복 문자 제거 (0) | 2022.04.08 |
---|---|
05. 특정 문자 뒤집기 (0) | 2022.04.08 |
03. 문장 속 단어 (0) | 2022.04.06 |
02. 대소문자 변환 (0) | 2022.03.31 |
01. 문자 찾기 (0) | 2022.03.31 |
댓글