1. 문제
N개의 단어 뒤집기.
2 - 1. 내 풀이
1. 입력받을 단어 수 N, 하나씩 Srting 배열에 저장
2. String 배열 요소들을 직접 뒤집기
3. 뒤집은 String 변수 개행 출력
2 - 2 내 코드
import java.util.Scanner;
public class String04 {
public static void printRev(String str) {
char[] ch = str.toCharArray(); //String을 char형 배열로 변환
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[ch.length-i-1]); // String을 char로 접근하여 맨 뒤부터 출력
}
System.out.println(); //개행
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String[] strArr = new String[num];
for (int i = 0; i < strArr.length; i++) {
strArr[i] = sc.next();
}
for (int i = 0; i < strArr.length; i++) {
printRev(strArr[i]);
}
}
}
약간 야매 같은 느낌이라 찝찝하다.
3 - 1 강의 풀이
1. ArrayList 사용
2. StringBuilder 사용
String 클래스의 메서드를 사용하면 새로운 객체가 생성되는데 StringBuilder는 기존의 변수가 변경되는것이라 메모리상에서 효율적.
3 - 2 강의 코드
import java.util.ArrayList;
import java.util.Scanner;
public class String04 {
public static ArrayList<String> solution(int n, String[] strArr) {
ArrayList<String> answer = new ArrayList<String>();
for (String x : strArr) {
String tmp = new StringBuilder(x).reverse().toString();
//StringBuilder타입이므로 toString이 필수임!
//new StringBuilder(String 타입 변수); 하면 StringBuilder형 변수 생성후 이를 toString하는 것
answer.add(tmp);
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String[] strArr = new String[num];
for (int i = 0; i < strArr.length; i++) {
strArr[i] = sc.next();
}
for (String x : solution(num, strArr)) {
//향상된 for문 오른쪽에는 큰 틀이 나오는데, ArrayList형 answer를 반환하는 solution메서드 사용
System.out.println(x);
}
}
}
4 - 1 추가 코드
import java.util.Scanner;
public class String04 {
public static void printRev(String str) {
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length / 2; i++) { //배열의 요소를 거꾸로 뒤집는 알고리즘
char tmp1 = ch[i];
ch[i] = ch[ch.length - i - 1];
ch[ch.length - i - 1] = tmp1;
}
String tmp2 = String.valueOf(ch); //char형 배열을 String으로 변환
System.out.println(tmp2);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String[] strArr = new String[num];
for (int i = 0; i < strArr.length; i++) {
strArr[i] = sc.next();
}
for (int i = 0; i < strArr.length; i++) {
printRev(strArr[i]);
}
}
}
위 코드와 내 코드의 다른 점.
나는 toCharArray(); 메서드 이후 한 단어의 맨 뒤부터 print로 출력하고 개행함.
위 코드는 간단한 알고리즘을 사용해 단어를 뒤집음
StringBuilder
String input = "reverse";
StringBuilder sb = new StringBuilder(input);
String output = sb.reverse().toString();
System.out.println("출력: " + output);
//출력: esrever
5. 얻어갈 점.
1. String을 char배열로 바꿔주는 toCharArray() 메서드 복습
2. StringBuilder 클래스 사용
3. 향상된 for문의 배열명에 함수를 사용할 수 있다는 점.
대신 해당 함수가 배열을 반환해야함.
4. char 배열을 String으로 바꿔주는 String 클래스의 valutOf()메서드
'알고리즘 > String(문자열)' 카테고리의 다른 글
String(문자열) - 7. 회문 문자열 (0) | 2023.07.20 |
---|---|
String(문자열) - 6. 중복 문자 제거 (1) | 2023.07.20 |
String(문자열) - 5. 특정 문자 뒤집기 (1) | 2023.07.12 |
String(문자열) - 3. 문장 속 단어 (1) | 2023.06.30 |
String (문자열) - 문자 찾기, 대소문자 변환 (0) | 2023.06.28 |