이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(https://cote.inflearn.com/contest/10/problems) (김태원)의 문제입니다.
문제 설명
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class sec01_05 {
public static String solution(String str) {
char[] temp = str.toCharArray();
int lp = 0; int rp = str.length() - 1;
while (lp < rp){
if(!Character.isAlphabetic(temp[lp])) ++lp;
else if(!Character.isAlphabetic(temp[rp])) --rp;
else {
char tmp = temp[lp];
temp[lp] = temp[rp];
temp[rp] = tmp;
++lp; --rp;
}
}
return String.valueOf(temp);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(solution(br.readLine()));
}
}
설명
초기 설정
- char[] temp = str.toCharArray();: 입력 문자열을 문자 배열로 변환한다. 문자열은 불변 객체이므로, 배열로 변환하여 개별 문자에 접근하고 수정하기 위함이다.
- int lp = 0; int rp = str.length() - 1;: 두 개의 포인터 lp와 rp를 설정한다. lp는 배열의 시작을, rp는 배열의 끝을 가리킨다.
반복문
- while (lp < rp): 두 포인터가 교차할 때까지 반복한다.
- if (!Character.isAlphabetic(temp[lp])) ++lp;: lp가 가리키는 문자가 알파벳이 아니면 lp를 오른쪽으로 이동한다.
- else if (!Character.isAlphabetic(temp[rp])) --rp;: rp가 가리키는 문자가 알파벳이 아니면 rp를 왼쪽으로 이동한다.
- else: 두 포인터가 가리키는 문자가 모두 알파벳이면 두 문자를 교환하고, lp와 rp를 각각 오른쪽과 왼쪽으로 이동한다.
문자열 변환
- return String.valueOf(temp);: 변환된 문자 배열을 문자열로 다시 변환하여 반환한다.
char[]의 toString() 메서드
char[] 배열에 대해 toString() 메서드를 호출하면, 배열의 요소를 문자열로 변환하는 것이 아니라, 배열 객체의 메모리 주소를 나타내는 해시코드를 포함한 문자열을 반환하게 된다.
이는 Object 클래스의 toString() 메서드가 호출되기 때문이다.
char[] 배열은 Object 클래스를 상속받기 때문에, 특별히 오버라이드된 toString() 메서드가 없다면 기본적으로 Object의 toString() 메서드가 사용된다.
'자료구조 & 알고리즘 > Inflearn' 카테고리의 다른 글
[인프런 알고리즘] Chapter 1, 7번 문제(회문 문자열) (0) | 2024.07.07 |
---|---|
[인프런 알고리즘] Chapter 1, 6번 문제(중복 문자 제거) (0) | 2024.07.07 |
[인프런 알고리즘] Chapter 1, 4번 문제(단어 뒤집기) (0) | 2024.07.05 |
[인프런 알고리즘] Chapter 1, 3번 문제(문장 속 단어) (0) | 2024.07.04 |
[인프런 알고리즘] Chapter 1, 2번 문제(대소문자 변환) (0) | 2024.07.03 |