본문 바로가기

문제 풀이/인프런

[Java11/알고리즘] 1-4 단어 뒤집기

문제

N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.

 


입력

첫 줄에 자연수 N(3<=N<=20)이 주어집니다.

두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만 구성되어 있습니다.
 


출력 

N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.


예시 입력 1 

3
good
Time
Big


예시 출력 1

doog
emiT
giB

 



해결

두가지 방법으로 풀어보았다.

 

1. StringBuilder 이용

 

StringBuilder 의 메소드 중 하나인 reverse()를 사용하였다.

String x를 StringBuilder(x)로 StringBuilder의 형태로 만들어준다. 그다음, .reverse()를 이용하여 순서를 뒤집는다. 그리고.toString()을 이용하여 String 으로 변환시켜 ArrayList<String> 인 answer에 넣어주면 된다.

 

StringBuilder에 대한 내용을 정리해두었으니 참고하면 좋다.

https://jinnocode.tistory.com/6

 


 2. 직접 뒤집기

단어를 Character 별로 자르겠다.

그리고 맨 왼쪽문자를 lt로 하고, 제일 오른쪽을 rt로 잡겠다. 그런다음 lt와 rt에 위치한 문자를 서로 교환해준다. 그리고 lt는 하나씩 늘려주고 rt는 하나씩 줄여주겠다. 이 행동을 lt가 rt보다 크거나 같아지면 그만두면 된다. 다른말로, lt가 rt보다 작을때까지 계속 교환해주면 된다.

 

예시를 smart라는 단어로 잡아보겠다.

 

    s     m    a     r     t  

    0     1     2     3    4

 

이때 lt는 s(0) , rt는 t(4)를 가리킬거다.

둘을 교환해주면

 

     t     m     a     r     s

     0     1     2     3     4

그리고 lt는 오른쪽으로 한칸, rt는 왼쪽으로 한칸 이동한다.

그렇다면 lt는 m(1), rt는 r(3)를 가리킨다.

또 교환을 진행해주면,

 

     t     r     a     m    s

     0     1     2     3     4

 

위와 같이 된다. 여기서 lt는 오른쪽으로, rt는 왼쪽으로 한칸 이동하려 하는데, 그렇게 되면 lt가 rt보다 많아지게 된다.

여기서부터 교환을 해주지 않아도 된다.

이렇게 되면,  단어 뒤집기가 완료되었다.



CODE
 

1. StringBuilder 이용

import java.util.*;

public class Main {
    public static ArrayList<String> solution(int n, 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) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String[] str = new String[n];
        for(int i=0; i<n; i++){
            str[i] = in.next();
        }
        for(String x : solution(n,str)){
            System.out.println(x);
        }
    }
}


2. 직접 뒤집기

import java.util.*;

public class Main {
    public static ArrayList<String> solution(int n, String[] str){
        ArrayList<String> answer = new ArrayList<>();
        for(String x : str){
            char[] s = x.toCharArray();
            int lt =0, rt=x.length()-1; //lt : 문자열의 왼쪽부터 시작, rt: 오른쪽부터 시작
            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 in = new Scanner(System.in);
        int n = in.nextInt();
        String[] str = new String[n];
        for(int i=0; i<n; i++){
            str[i] = in.next();
        }
        for(String x : solution(n,str)){
            System.out.println(x);
        }
    }
}

 


결과