N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요.
첫 줄에 자연수 N(3<=N<=20)이 주어집니다.
두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만 구성되어 있습니다.
N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String [] strArr = new String[N];
for (int i=0; i<N; i++) {
strArr[i] = sc.next();
}
for (int j=0; j<strArr.length; j++) {
char[] charArr = strArr[j].toCharArray();
for (int k=charArr.length-1; k>=0; k--) {
System.out.print(charArr[k]);
}
System.out.println();
}
}
}
strArr은 입력받은 숫자만큼의 크기인 배열로 생성하고 단어들을 하나씩 추가해준다.
strArr에 있는 단어 하나씩 charArr이라는 char배열에 담고 char배열의 마지막부터 처음까지 역순으로 문자를 출력하는 형식으로
코드를 작성했다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String [] strArr = new String[N];
for (int i=0; i<N; i++) {
strArr[i] = sc.next();
}
for (String s : strArr) {
char[] charArr = s.toCharArray();
int lt = 0;
int rt = s.length() - 1;
while (lt < rt) {
//교환
char tmp = charArr[lt];
charArr[lt] = charArr[rt];
charArr[rt] = tmp;
lt++;
rt--;
}
String string = String.valueOf(charArr);
System.out.println(string);
}
}
}
첫번째 코드에서는 이중 for문을 사용해서 시간 복잡도가 증가했다.
이 코드에서는 이중 for문을 사용하지 않고 다르게 풀어봤다.
strArr에 들어있는 단어마다 char배열로 바꾸어주고
int형 변수 lt, rt를 생성했다. lt는 단어의 맨 앞부터, rt는 맨 뒤부터 시작하며
lt와 rt의 문자를 교환해준다.
그리고 lt++ 와 rt--를 통해서 서로 하나씩 줄어드는데
lt의 값이 rt보다 커지면 바꿀 이유가 없어지기 때문에 while (lt < rt)로 while문을 만들어준다.
String.valueOf(charArr) : Object을 String 형태로 반환
String.valueOf() vs toString() : 둘다 String 형태로 반환하지만, valueOf()는 null일시 'null' 문자열을 반환하지만 .toString()은 NullPointer Exception을 발생시킨다.