문제
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);
}
}
}
결과
'문제 풀이 > 인프런' 카테고리의 다른 글
[JAVA11/알고리즘]1-6 중복 문자 제거 (0) | 2022.08.02 |
---|---|
[JAVA11/알고리즘] 1-5 특정 문자 뒤집기 (1) | 2022.07.31 |
[Java11/알고리즘] 1-3 문장 속 단어 (1) | 2022.07.29 |
[JAVA11/알고리즘] 1-2 대소문자 변환 (0) | 2022.07.29 |
[JAVA11/알고리즘] 1-1 문자 찾기 (0) | 2022.07.28 |