[ Java 코딩 테스트 ] 단어 뒤집기

한대희·2024년 1월 12일
0

Java 코딩 테스트

목록 보기
5/11

문제

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

입력

  • 첫 줄에 자연수 N ( 3 <= N <= 20 )이 주어진다.
  • 두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어진다.
  • 단어는 영어 알파벳으로만 구성되어 있다.

출력

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

예시

// 입력
3
good
time
big

// 출력
doog
emit
gib

코드

  • stringBuilder 사용
public class Main {
    public static void main(String[] args) {
        Scanner input =  new Scanner(System.in);
        // 정수를 입력 받는다.
        int num = input.nextInt();
        // 정수의 숫자만큼 문자를 입력 받으므로 해당 정수 만큼의 String 배열을 생성한다.
        String[] str= new String[num];
        // 입력 받은 정수 만큼의 Scanner 입력창을 생성한다.
        for (int i = 0; i < num; i++){
            str[i] = input.next();
        }
        // 전달 받은 문자열 배열을 solution 함수에 정수와 함께 전달한다.
        for (String x : solution(num, str)){
            System.out.println(x);
        }
    }

    public static ArrayList<String> solution (int num , String[] str) {
        ArrayList<String> answer = new ArrayList<>();
        for (String x : str) {
            // StringBuilder라는 문자열을 다루는 또 다른 클래스가 있다. 여기에 문자를 전달한다.
            // StringBuilder가 제공하는 reverse메서드를 사용하면 문자열을 뒤집을 수 있다.
            // 아래 tmp변수의 타입이 String이기 때문에
            // StringBuilder 사용 후 다시 toString으로 문자열로 바꾸어야 한다.
            String tmp = new StringBuilder(x).reverse().toString();
            
            //ArrayList에 요소를 추가할 때는 add를 사용한다.
            answer.add(tmp);
        }
        return answer;
    };
}
  • toCharArray 사용 ( 요소 하나하나를 수동으로 변경 )
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

class Main {

    public static ArrayList<String> solution(int num , String[] str) {
        ArrayList<String> answer = new ArrayList<>();
        for (String x : str) {
            // 배열에 담긴 하나하나의 문자를 또 다시 글자 하나하나의 배열로 만든다.
            char[] arr = x.toCharArray();
            // 배열의 첫번째 인덱스와 마지막 인덱스를 각각 변수로 지정한다.
            int lt = 0, rt = x.length()-1;
            // 첫번째 인덱스는 하나씩 증가시키고, 마지막 인덱스는 하나씩 감소 시켜 계속해서 처음과 끝의
            // 요소의 자리를 바꿀 것이다.
            // 따라서 lt가 rt 보다 커지는 순간 더이상 바꿀 요소가 없는 것이므로 아래와 같은 조건을 걸어
            // 반복 시킨다.
            while (lt < rt) {
                // 먼저 첫번째 인덱스 요소의 값을 복사해 두고 서로의 위치를 바꾼다.
                // 자바는 값을 복사해서 대입하기 때문에 나중에 배열의 첫번째 요소를 바꿔도
                // tmp의 값은 이전의 값 그대로 있다.
                char tmp = arr[lt];
                arr[lt] = arr[rt];
                arr[rt] = tmp;
                lt++;
                rt--;
            }

            String tmp2 = String.valueOf(arr);
            answer.add(tmp2);
        }
        return answer;

    };

    public static void main(String[] args) {


        // 스캐너 객체를 생성한다.
        Scanner input = new Scanner(System.in);
        // 숫자를 입력 받는다.
        int num = input.nextInt();

        String[] str = new String[num];
        for(int i = 0; i< num; i++){
            str[i] = input.next();
        }


        for (String x : solution(num,str)){
            System.out.println(x);
        }


    }
}

사용한 메서드

stringBuilder

  • stringBuilder는 문자열을 다루는 또다른 클래스다.
  • 아래와 같이 다양한 메서드를 사용할 수 있다.
public class sb {
    public static void main(String[] args) throws IOException{
        StringBuilder sb = new StringBuilder("aaa");

        // 문자열 추가
        System.out.println(sb.append("bbb")); // aaabbb
        System.out.println(sb.append(4)); // aaabbb4

        // 문자열 삽입
        System.out.println(sb.insert(2, "ccc")); // aacccabbb4
        
        // 문자열 치환, 문자열 교체
        System.out.println(sb.replace(3, 6, "ye")); // aacyebbb4

        // 인덱싱, 문자열 자르기
        System.out.println(sb.substring(5)); // bbb4
        System.out.println(sb.substring(3, 7)); // yebb

        // 문자 삭제
        System.out.println(sb.deleteCharAt(3)); // aacebbb4

        // 문자열 삭제
        System.out.println(sb.delete(3, sb.length())); // aac

        // 문자열 변환
        System.out.println(sb.toString()); // aac

        // 문자열 뒤집기
        System.out.println(sb.reverse()); // caa

        // 문자 대체, 문자 교체, 문자 치환
        sb.setCharAt(1, 'b');
        System.out.println(sb); // cba

        // 문자열 길이 조정
        sb.setLength(2);
        System.out.println(sb); // cb
    }
}

String.valueOf()

  • Object를 String으로 변환하는 역할을 한다.
  • String 클래스의 static 메서드다.
  • 이전의 toString도 같은 역할을 수행하는데 차이점인 Object가 null인 경우 toString은 Null PointerException을 발생시키지만, String.valueOf()는 "null"이라는 문자열로 처리한다.
char[] arr = {'a', 'b', 'c'};
String changeObjectToString = String.valueOf(arr);
System.out.println(changeObjectToString); // abc 출력

String[] arr2 = null;
String changeOjectToString2 = String.valueOf(arr2);
System.out.println(changeOjectToString2); // null 출력
profile
개발 블로그

0개의 댓글