본문 바로가기
자바 알고리즘

04. 단어 뒤집기

by watergrace2u 2022. 4. 6.
반응형
SMALL

인프런 - 자바 알고리즘 강의

 

# 방법 1. StringBuilder(), reverse() 사용

 

String tmp = new StringBuilder(x).reverse().toString();

=> 각 단어를 StringBuilder를 사용하여 객체로 만들고, reverse() 한 후, 다시 문자열로 만들어준다.

 

Q> String이 있는데 왜 굳이 StringBuilder를 사용할까?

A> String은 String끼리 더하거나, 추가하거나 변경하면 새로운 객체가 생성되어 변경된다.

하지만 StringBuilder는 문자를 추가하거나 바꾸어도, 처음에 만든 그 객체 하나를 이용한다.

그렇기에 String 연산을 보다 더 편리하게 할 수 있고, 메모리도 절약된다.

 

* 단점: 이 방법은 한 단어를 특정 조건을 걸어 바꾸는 방법 적용이 불가능하다.

ex> study 단어를 'yduts'로 바꿀 수 있지만, '짝수번째 문자만 바꾸시오' 와 같은 문제는 풀 수 없다.

=> 해결책: toCharArray()를 사용하여 단어를 문자 배열로 바꿔준다.

 

import java.util.*;
  
public class Main {
  
  public ArrayList<String> solution(String[] str){
    ArrayList<String> answer = new ArrayList<>();
    
    for(String x:str){
     String tmp = new StringBuilder(x).reverse().toString();
      answer.add(tmp);
    }
    return answer;
    
  }
  public static void main(String[] args){
    Main T = new Main();
    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: T.solution(str)){
      System.out.println(x);     
    }
  }
}

 

# 방법 2. 각 단어를 문자배열로 만들어 그 안에서 교환하는 형식

 

- lt(문자열의 처음 index), rt(문자열의 끝 index)를 설정하고, lt와 rt를 바꾼다.

- while(lt<rt)인 동안, lt는 ++, rt는 --한다.

 

* String tmp = String.valueOf(배열)

=> 해당 배열을 다시 문자열로 만들어준다.

 

 

import java.util.*;
  
public class Main {
  
  public ArrayList<String> solution(String[] str){
    ArrayList<String> answer = new ArrayList<>();
    
    for(String x:str){
     char[] s = x.toCharArray();
     int lt=0, rt=x.length()-1;
     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){
    Main T = new Main();
    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: T.solution(str)){
      System.out.println(x);     
    }
  }
}
반응형
LIST

'자바 알고리즘' 카테고리의 다른 글

06. 중복 문자 제거  (0) 2022.04.08
05. 특정 문자 뒤집기  (0) 2022.04.08
03. 문장 속 단어  (0) 2022.04.06
02. 대소문자 변환  (0) 2022.03.31
01. 문자 찾기  (0) 2022.03.31

댓글