[문자열] 4. 단어 뒤집기
by 개발하는지호설명
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
개발하는지호