Coding Test Inflearn

[String] 단어 뒤집기

coding-orange 2024. 1. 26. 16:32
728x90

 

 

단어 뒤집기

 

설명

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

 

 

입력

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

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

 

 

출력

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

 

 

예시 입력

3
good
Time
Big

 

 

예시 출력

doog
emiT
giB

 

 

풀이

 

1. StringBuilder 이용하기

  • StringBuilder로 문자열을 생성할 수 있다.
  • StringBuilder의 reverse() 로 문자열을 뒤집는다.

 

 

2. 직접 뒤집기

  • 입력받은 문자열 배열을 for-each문을 이용해 돈다. 
  • 하나의 문자열을 문자 배열로 만든다. String의 toCharArray() 메소드를 이용한다.
  • 왼쪽 끝의 위치를 가리키는 lt, 오른쪽 끝의 위치를 기리키는 rt 변수를 정의한다.
  • 왼쪽 위치가 오른쪽 위치보다 커질 때 까지 아래 로직을 반복한다.
    • tmp 변수에 왼쪽 끝의 문자를 저장한다.
    • 왼쪽 끝의 문자에 오른쪽 끝의 문자를 대입한다.
    • 오른쪽 끝의 문자에 tmp 변수를 대입한다.
    • 왼쪽 끝의 인덱스를 증가시킨다.
    • 오른쪽 끝의 인덱스를 감소시킨다.
  • 문자 배열을 문자열로 만든다. String 클래스의 valueOf() 메소드를 이용한다.
  • 해당 문자열을 리스트에 추가한다.

 

코드

 

1. StringBuilder 이용하기

package solve;

import java.util.ArrayList;
import java.util.Scanner;

public class Main_1_4 {

    public ArrayList<String> solution(int n, String[] str) {
        ArrayList<String> answer = new ArrayList<>();

        for(String s : str) {
            String tmp = new StringBuilder(s).reverse().toString();
            answer.add(tmp);
        }
        
        return answer;
     }


    public static void main(String[] args){
        Main_1_4 T = new Main_1_4();
        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 : T.solution(n, str)) {
            System.out.println(x);
        }
    }
}

 

 

2. 직접 뒤집기

package solve;

import java.util.ArrayList;
import java.util.Scanner;

public class Main_1_4 {

    public 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는 오른쪽 끝을 가르키고, 서로 교환, 하나씩 증가, 감소
            // lt < rt while문

            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_1_4 T = new Main_1_4();
        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 : T.solution(n, str)) {
            System.out.println(x);
        }
    }
}
728x90