문자열 뒤집기
문자열을 입력받는 부분의 코드는 아래와 같다. 여기서는 실제 문제를 해결해 답안을 도출해내는 solution 메서드만 추가적으로 작성하겠다. (import문도 생략한다.)
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(main.solution(str));
}
}
1. 직접 문자열을 뒤집는 방법
1) 가장 간단하게는 직접 문자열을 뒤집는 방법이 있다. 여기에도 가장 원초적인 방식으로는 문자열의 길이 만큼 반복되는 루프를 돌리는 것이다.
public class Main{
private String solution(String str) {
char[] chars = str.toCharArray();
for(int i = chars.length - 1; i >= 0; i--) answer += chars[i];
return String.valueOf(chars);
}
// main 생략
}
2) 위의 코드를 조금 개선하여 걸리는 시간을 줄일 수 있다. 문자열의 양 끝단의 값부터해서 인덱스를 하나씩 옮겨가며 좌우를 바꾸는 방법이다. 이 경우에는 루프가 문자열의 길이의 반 정도의 횟수만 돌기 때문에 앞의 방법보다 더 빠른 속도로 답을 도출할 수 있다.
public class Main{
private String solution(String str) {
char[] chars = str.toCharArray();
int lt = 0; rt = chars.length - 1;
while(lt <= rt) {
char temp = chars[lt];
chars[lt] = chars[rt];
chars[rt] = temp;
lt++;
rt--;
}
return String.valueOf(chars);
}
// main 생략
}
2. StringBuilder를 이용하는 방법
위의 방법들만 알았다면 너무 간단해서 허무할 것이다. StringBuilder의 reverse() 메서드를 통해 문자열을 뒤집는 방식이다.
public class Main{
private String solution(String str) {
String answer = new StringBuilder(str).reverse().toString();
return answer;
}
// main 생략
}
회문 문자열(팰린드롬)인지 확인
1. 직접 비교
직접 모두 하나씩 뒤집어 비교하는 방식이 가장 쉬운 방식이지만 가장 비효율적인 방식이다. 위의 방법 중 (2)번의 lt, rt를 이용하는 방식을 사용해 양 끝단의 단어부터 비교해도 되고, 조금 다른 방식을 사용해도 된다. '직접 문자열을 뒤집는 방식'에서 (2)번 방식에서는 양 끝단에서 시작하는 인덱스 값을 lt, rt로 직접 제어해주었다면, 아래 방법은 lt의 값에 따라 rt의 값이 제어되게 하는 방식이다. (lt, rt의 변수를 따로 정의하지는 않는다.)
2. StringBuilder를 이용해 뒤집은 문자열과 비교하는 방법
public class Main {
private String solution(String str) {
String answer = new StringBuilder(str).reverse().toString();
return answer;
}
// main 생략
}
cf. 문자열을 대소문자 구분없이 비교하는 경우 아래 두 가지 방법이 있다.
(1) toLowerCase(), toUpperCase()를 통해 대소문자를 통일시켜 equals()를 이용해 비교하는 방식
(2) equals() 대신 equalsIgnoreCase()를 이용하는 방식 - equalsIgnoreCase()는 equals()와 달리 대소문자 구분을 하지 않는다.
'자료구조 및 알고리즘' 카테고리의 다른 글
알고리즘) N일간 연속된 K일 동안의 최대 매출액 (0) | 2022.07.05 |
---|---|
알고리즘) 오름차순으로 정렬된 두 배열 합치기 (0) | 2022.07.05 |
알고리즘) 봉우리 수 구하기 (0) | 2022.07.04 |
알고리즘) N*N 격자판의 최대합 (0) | 2022.07.04 |
알고리즘) 1부터 주어진 수 까지의 소수 개수 구하기(에라토스테네스 체) (0) | 2022.07.01 |