개발하는지호

[문자열] 4. 단어 뒤집기

by 개발하는지호
4. 단어 뒤집기
 

설명

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

입력

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

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

출력

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

예시 입력 1 

3
good
Time
Big

예시 출력 1

doog
emiT
giB

 

 

두 가지 풀이법이 있다.

 

1. StringBuilder와 ArrayList로 푸는 방법

 

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

class Main{
    public ArrayList<String> solution(String[] str) {
        ArrayList<String> list = new ArrayList<>();

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

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);

        int number = in.nextInt();
        String[] str = new String[number];

        for (int i = 0; i < number; i++) {
            str[i] = in.next();
        }

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


    }
}

 

 

2. 짝지 끼리 교환하는 방식

 

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


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 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(str)) {
            System.out.println(x);
        }
    }
}

 

 

풀이 느낀점 : 아직 전체적인 구조가 머릿속에서 잘 그려지지 않는거 같다. 일단은 머릿속으로 구상하고 문제를 접근하는 방식에 익숙해져야 겠다.

 

<<추가 공부>>

 

nextLine과 next의 차이

1. next()

  • 공백을 기준으로 한 단어 또는 한 문자씩 입력받는다.
  • 버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽는다.
  • 개행 문자를 가져오지 않는다.

ex)

Hello World를 입력하면

Hello 만이 출력이 된다.

 

2. nextLine()

  • 문자 또는 엔터를 치기 전까지의 문장 전체를 입력받는다.
  • 버퍼에 입력된 문자열을 개행 문자까자 다 가져온다.

ex)

Hello World를 입력하면

Hello World가 출력이 된다.

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int num;
        String str;
        System.out.println("num입력");
        num = input.nextInt();

        System.out.println("str입력");
        str = input.nextLine();

        System.out.println("num : " + num);
        System.out.println("str : " + str);
        input.close();
    }
}

 

이때 출력이 

num : 10

str : 

로 원하지 않은 상황이 발생한다.

 

이는 nextInt 같은 경우 숫자를 입력하면 10\ 이 입력이 되는데 이때 10만을 가져간다. 그리고 enter는 버려지게 되는데

이 enter가 nextLine에 들어가면서 발생하는 문제이다.

 

해결방법

1. nextLine -> next 로 변경해준다. next도 개행문자를 포함하지 않기 때문이다.

 

2. nextInt와 nextLine 사이에 nextLine을 추가해준다.

2번 예시

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int num;
        String str;
        String str1;
        System.out.println("num입력");
        num = input.nextInt();

        str1 = input.nextLine();

        System.out.println("str입력");
        str = input.nextLine();

        System.out.println("num : " + num);
        System.out.println("str : " + str);
        input.close();
    }
}

 

이렇게 하면 문제가 해결이 된다.

 

 

StringBuilder와 함수

 

  • reverse()
  • toString() : 문자열로 반환
  • charAt() 
  • substring() :
  • indexOf() : 문자열 검색해서 위치 반환

 

ArrayList

ArrayList  Collection Framework란 여러 개의 데이터를 쉽고 효율적으로 관리 할 수 있는 표준화된 방법을 제공하는 클래스 중 하나이다. 컬랙션 프레임 워크 중 List 인터페이스에 해당된다.

 

즉, 순서가 있는 데이터의 집합이며 데이터의 중복을 허용하는 컬랙션 프레임 워크이다. 쉽게 말해 확장된 배열이라고 보면 된다.

한 번 생성되었을 때 크기가 변하지 않는 배열과는 다르게 객체를 자동 추가하여 크기를 증가시킬 수 있다.

 

메소드

  • size()
  • isEmpty
  • contains()
  • toArray()
  • add()
  • remove()
  • clear()
  • get()
  • set()
  • indexOf() 

등등이 있다.

 

String.valueOf

String.valueOf(char[] a) 메서드를 사용하면 char 배열을 문자열로 변환할 수 있다.



ex)

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String result = String.valueOf(charArray);
System.out.println(result); // "Hello"

 

'코딩테스트' 카테고리의 다른 글

[문자열] 6. 중복문자제거  (0) 2023.12.01
[문자열] 5. 특정 문자 뒤집기  (1) 2023.11.29
[문자열] 3. 문장 속 단어  (1) 2023.11.26
[문자열] 2. 대소문자 변환  (1) 2023.11.25
[문자열] 1. 문자 찾기  (0) 2023.11.25

블로그의 정보

DevSecOps

개발하는지호

활동하기