String #4. 단어 뒤집기
카테고리 : TIL (Tody I Learned) >> Algorithm
인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 수강 중
문제:
N개의 단어 뒤집어서 출력
내 코드:
public class Problem4 {
public String solution(String str){
String ans = null;
char[] tmp = new char[str.length()];
char[] charArr = str.toCharArray();
for(int i = 0; i < charArr.length; i++) {
tmp[i] = charArr[charArr.length - i - 1]; //뒤집기
}
ans = String.copyValueOf(tmp); //char 배열 String 변환
return ans;
}
public static void main(String[] args) {
Problem4 pb4 = new Problem4();
Scanner in = new Scanner(System.in);
int cnt = in.nextInt();
String[] inString = new String[cnt];
for(int i = 0; i < cnt; i++) { //N개 단어 입력받기
inString[i] = in.next();
}
for(int i = 0; i < cnt; i++) {
System.out.println(pb4.solution(inString[i]));
}
return ;
}
}
- 입력받은
String
을char[]
로 변환 char[]
을 뒤집기- 뒤집은
char[]
을 String으로 변환하여 출력
다른 방법 1
인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 답 참조
public String solution(String str){
String ans = new StringBuilder(str).reverse().toString();
return ans;
}
StringBuilder
를 사용하면 간단하게 구현할 수 있다.
StingBuilder
선언reverse()
메서드를 이용해 뒤집기toString()
메서드를 이용해 String형으로 변환
StringBuilder를 사용하는 이유
String
객체는 변경 불가능String
을 연산하게 되면 메모리 할당과 해제가 발생- 성능적으로 좋지 않음
StringBuilder 메서드
메서드 | 설명 |
---|---|
StringBuilder append() | 기본 자료형 데이터를 문자열에 추가 |
StringBuilder delete(int start, int end) | start ~ end 이전까지 데이터 삭제 |
StringBuilder insert(int offset, String str) | offset 위치에 str에 전달된 문자열 추가 |
StringBuilder reverse() | 저장된 문자열 내용 뒤집기 |
StringBuilder substring(int start, int end) | start ~ end 이전까지의 내용만 담은 String 인스턴스 생성 및 반환 |
String toString() | 저장된 문자열 내용을 담아 String 인스턴스 생성 및 반환 |
다른 방법 2
인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 답 참조
public String solution(String str){
String ans = "";
char[] charArr = str.toCharArray();
int lt = 0, rt = str.length() - 1;
while(lt < rt) {
char tmp = charArr[lt];
charArr[lt] = charArr[rt];
charArr[rt] = tmp;
lt++;
rt--;
}
ans = String.copyValueOf(charArr);
return ans;
}
하나씩 거꾸로 하는 방법이 아니라 양 끝에 있는 두 데이터를 바꿔가며 구현하는 것도 가능
개선된 점:
- StringBuilder를 사용하면 굉장히 쉽게 구현 가능하다
- 양 끝 데이터를 바꾸며 구현하는 방법도 있다
끝!