// 문자열 s 를 거꾸로 출력하는 프로그램을 작성하세요.
// 단, 각 단어의 알파벳 순서는 그대로 출력합니다.
// 문장에 공백이 여러개일 시, 단어와 단어 사이 하나의 공백을 제외한 나머지 공백은 제거하세요.
// 입출력 예시
// 문자열 s: "the sky is blue"
// 출력: "blue is sky the"
// 문자열 s: " hello java "
// 출력: "java hello"
public class Main {
public static String solution(String s) {
s = removeWhiteSpace(s);
String reversed = reverseString(s.toCharArray(), 0, s.length() - 1);
String result = reverseWords(reversed);
return result;
}
private static String removeWhiteSpace(String s) {
char[] chars = s.toCharArray();
int p1 = 0;
int p2 = 0;
/**
* 문자열 trim하는 테크닉 기억하기..
*/
while (p2 < chars.length) {
while (p2 < chars.length && chars[p2] == ' ') {
p2++;
}
while (p2 < chars.length && chars[p2] != ' ') {
chars[p1++] = chars[p2++];
}
while (p2 < chars.length && chars[p2] == ' ') {
p2++;
}
if (p2 < chars.length) {
chars[p1++] = ' ';
}
}
return String.valueOf(chars).substring(0, p1);
}
private static String reverseString(char[] chars, int p1, int p2) {
while (p1 < p2) {
char tmp = chars[p1];
chars[p1] = chars[p2];
chars[p2] = tmp;
p1++;
p2--;
}
return String.valueOf(chars);
}
private static String reverseWords(String reversed) {
char[] chars = reversed.toCharArray();
int p1 = 0;
int p2 = 0;
while (p2 < chars.length) {
while (p2 < chars.length && chars[p2] != ' ') { //p2가 공백을 만나면 멈춤
p2++;
}
reverseString(chars, p1, p2 - 1);
p2++;
p1 = p2;
}
return String.valueOf(chars);
}
public static void main(String[] args) {
// Test code
System.out.println(solution("the sky is blue"));
System.out.println(solution(" hello java "));
}
}
'자료구조 & 알고리즘 > == 투포인터 ==' 카테고리의 다른 글
투포인터 문제 - 가장 긴 팰린드롬 부분 문자열 (0) | 2024.07.15 |
---|---|
투포인터 문제 - 합이 0이 되는 숫자들 고르기 (투포인터로 중복 방지) (0) | 2024.06.27 |