본문 바로가기

알고리즘/인프런

섹션 1. String(문자열)_4. 단어 뒤집기

문제

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

입력

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

출력

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

입출력 예제


다음과 같이 두 가지 방식으로 풀어보았다.

1. reverse 메소드를 사용한다.

2. reverse 메소드를 직접 구현한다.

 

참고로 변수명은 개인적으로 의미부여해서 작성하는 것이니 크게 신경쓰지 않아도 된다.

(본인이 원하는 변수명으로 써도 무관하다.)

 

1. reverse 메소드 사용

먼저 reverse 메소드를 사용하는 풀이 방식이다.

이 문제는 reverseWord 메소드에 static을 선언하였으므로  main에 객체 생성을 하지 않았다.

 

N개를 입력받을 변수를 nextInt()로 선언하고 N개의 단어를 입력받을 변수를 next()로 선언한다.

여기에서 입력받을 단어는 갯수가 정해져있는게 아니고 사용자가 입력한 값에 따라 변경되므로 배열로 선언해준다.\

for문을 통해 0부터 N까지 각 단어들을 wordList 배열에 넣어준다.

마지막으로 향상된 for문을 통해 뒤바뀐 문자를 출력하는 코드를 작성한다.

 

이제 메소드를 구현해보자.

결과값이 배열로 나와야하기 때문에 결과값을 출력할 result 변수를 ArrayList 로 선언한다.

 

향상된 for문을 사용하여 입력받은 N개의 문자열을 하나씩 뒤집는다.

이제 reverse() 메소드를 사용하여 문자를 뒤집을건데, 아쉽게도 이 메소드는 String 클래스에서 제공하지 않는다.

그래서 StringBulder를 사용하여 reverse 메소드를 사용한 후, toString() 을 통해 String 형태로 변환해준다.

reverseWordList에는 뒤집힌 문자가 들어가 있고, 이 문자를 result 변수에 add를 통해 넣어준다.

 

수행 결과를 확인한다.


2. reverse 메소드 직접 구현

이번에는 reverse 메소드를 직접 구현하는 풀이 방식이다.

 

위와 동일하게 main을 작성하고, 메소드 구현으로 바로 넘어가보자.

 

먼저 toCharArray()를 사용하여 word에 입력된 문자열을 문자 하나씩 분리해서 문자 배열을 생성하도록 한다.

 

이제 leftIndex, rightIndex 변수를 선언하는데 변수의 의미는 다음과 같다.

  • leftIndex : 좌측 알파벳의 index
  • rightIndex : 단어의 길이 -1 을 통해 맨 마지막 알파벳의 인덱스 설정

이 변수를 선언하는 이유는 '인덱스를 통해 양쪽 끝의 알파벳을 서로 하나씩 바꿔주는 방식' 으로 문제를 풀기 때문이다.

while을 통해 leftIndex 가 rightIndex 보다 작아질 때까지 양 끝의 문자를 바꿔주는 작업을 반복한다.

 

수행 결과를 확인한다.


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.