본문 바로가기
알고리즘/문자열, 정렬

[알고리즘] 단어 뒤집기 with Java, nextInt(), Stringbuilder(),valueOf()

by VIPeveloper 2022. 2. 24.
반응형

전날 9시 정도에 일찍 잠들었기 때문에 일찍 일어나게 되어 알고리즘 강의를 들었다 ! 오늘도 두강의 정도 들었는데, 풀컨디션으로는 2강의정도가 맥스인 것 같다... 집즁력 한계,,

오늘 배운 것

1. nextInt()

int를 받을 수 있다. 사용법은 아래와 같다.

Scanner kb = new Scanner(System.in);
int i = kb.nextInt();

2. String vs StringBuilder 

String은 불변객체이기 때문에 문자열을 새로 할당받을 때마다 새로운 객체를 생성한다는 특징이 있다. 

StringBuilder는 가변객체이기 때문에 문자열을 더했다 뺏다하는 연산이 필요할 때 사용한다.

// StringBuilder 사용하기
String str = "test";
String test = new StringBuilder(str);

3. StringBuilder는 reverse() 메서드를 지원한다. 문자열 뒤집기 가능 !

String test = new StringBuilder("123");
String test2 = test.reverse().toString();
System.out.println(test2); // 321

4. while (lt < rt)

항상 분할정복을 공부할 때마다 헷갈렸던 내용. 기초부터 차근차근히 쌓아간다는 느낌으로 다시 보니까 아 ! 이거구만 ! 하면서 공부했다.

// 풀이 핵심 코드
int lt=0,rt=str.length()-1;
while(lt < rt){
	char tmp = chars[lt];
    chars[lt] = chars[rt];
    chars[rt] = tmp;
    lt++;
    rt--;
}

5. 문제 풀이

이번엔 문제풀이를 두가지로 풀이했다. 둘다 기록해두면 좋은 풀이라고 생각한다.

import java.util.Scanner;

public class Main {

    public static String solution(String str) {
        String answer = "";
        int lt=0,rt=str.length()-1;
        char[] chars = str.toCharArray();
        while (lt < rt){
            char tmp = chars[lt];
            chars[lt] = chars[rt];
            chars[rt] = tmp;
            lt++;
            rt--;
        }
        answer = String.valueOf(chars);

        return answer;
    }
    
    public static String solution2(String str){
        return new StringBuilder(str).reverse().toString();
    }

    public static void main(String[] args) {

        Scanner kb = new Scanner(System.in);
        int i = kb.nextInt();
        for (int j = 0; j < i; j++) {
            String str = kb.next();
            System.out.println(solution(str));
            //System.out.println(solution2(str));
        }

    }
}
반응형