개발놀이터
1-4. 단어 바꾸기 본문
package string.flipword14.my;
import java.util.Scanner;
public class Main {
/**
* 으아아아아아아아 맞췄다아아아아아아아아아아아아아
*/
/**
* case1:
* StringBuilder 클래스의 reverse 를 이용하면 정말 쉽게 풀린다.
* 내가 푼 방법은 정말 원시적인 리버스이고 선생님이 푼 방식이 정말 깔끔한 리버스이다 다시 복습할 것
*
* case2:
* 1. String 문자열을 toCharArray 로 char 배열로 바꾼다.
*
* 2. lt, rt 의 개념 도입
* cf) lt, rt 란?
* 예를 들어 study 라는 문자열을 char 배열로 바꾸면
* 0 1 2 3 4
* s t u d y
* 이렇게 바뀐다.
*
* 여기서
* lt rt lt rt
* 0 1 2 3 4 --> 0 1 2 3 4
* s t u d y --> s t u d y
*
* 이렇게 lt 와 rt 를 lt 는 오른쪽 rt 는 왼쪽으로 한칸씩 움직인다.
*
* 3. A 와 B 의 자리를 바꿀 때 tmp 의 개념을 도입해 바꿔준다.
* ex)
* tmp = A
* A = B
* B = tmp
*
* 4. 마지막으로 lt 는 ++ rt 는 -- 로 값을 변경해준다 (lt 는 오른쪽으로 한칸 rt 는 왼쪽으로 한칸 이동)
*
* 5. 해당 반복문은 while 문으로 조건식은 lt < rt 이다.
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int line = kb.nextInt();
String array[] = new String[line];
for (int i = 0; i < line; i++) {
String input = kb.next();
array[i] = input;
}
for (int i = 0; i < line; i++) {
String[] solution = solution(line, array[i]);
System.out.println(solution[i]);
}
}
private static String[] solution(int line, String input) {
String answer[] = new String[100];
for (int i = 0; i < line; i++) {
String answerWord = "";
for (int j = 0; j < input.length(); j++) {
char c = input.charAt(input.length() - j - 1);
answerWord += c;
}
answer[i] = answerWord;
}
return answer;
}
}
맞추긴 했지만 정말 구질구질하게 풀어낸 문제라 정말 아쉬움
StringBuiilder 클래스의 reverse를 사용하면 정말 간단하게 풀리는 문제
StringBuilder 클래스는 모든 문자열을 뒤집을 때 사용하면 정말 편하지만 특정 문자를 뒤집고 싶을 때는 주석에 나와있는 대로 lt (left) 와 rt (right) 를 도입하여 수동으로 리버스 해야함
이 다음 문제에서 사용하기 때문에 반드시 알아야 하는 풀이방식
또한 tmp 를 통해 A 와 B 의 값을 뒤바꾸는 알고리즘은 정말 기초적인 부분이니 꼭 숙지하도록 하자
위에서 작성한 주석과 선생님의 풀이를 꼼꼼히 볼 것
package string.flipword14.teacher;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
private static ArrayList<String> solution(int n, String[] str) {
ArrayList<String> answer = new ArrayList<>();
/**
* StringBuilder 클래스를 이용해서 전체 단어 뒤집기
*/
for (String x : str) {
String tmp = new StringBuilder(x).reverse().toString();
answer.add(tmp);
}
/**
* lt 와 rt 를 도입하여 수동으로 뒤집는 방법
*/
for (String x : str) {
char[] s = x.toCharArray();
int lt = 0, rt = x.length();
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) {
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 : solution(n, str)) {
System.out.println(x);
}
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
1-6. 중복된 문자 제거 (0) | 2023.02.07 |
---|---|
1-5. 특정 문자 뒤집기 (0) | 2023.02.07 |
1-3. 문장 속 단어찾기 (0) | 2023.02.07 |
1-2. 대소문자 변환 (0) | 2023.02.07 |
1-1. 문자 찾기 (0) | 2023.02.07 |