📌 문제 설명
N개의 단어가 주어지면, 각 단어를 뒤집어서 출력하는 프로그램을 작성하세요.
- 첫 줄에 자연수 N(3 ≤ N ≤ 20)이 주어집니다.
- 두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다.
- 단어는 영어 알파벳으로만 구성됩니다.
- 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 자연수 N (3 ≤ N ≤ 20)
- 두 번째 줄부터 N개의 단어가 주어짐.
🔹 출력
- 입력된 단어들을 뒤집어서 한 줄씩 출력.
🔸 예제 입력 1
3
good
Time
Big
🔸 예제 출력 1
doog
emiT
giB
💡 해결 방법
- 문자열을 뒤집는 방법은 두 가지가 있음
- StringBuilder.reverse() 사용 → 가독성이 좋고 간결함
- 투 포인터 알고리즘 활용 → 배열을 직접 조작하며 뒤집기
- N개의 단어를 입력받아 각각 뒤집고 리스트에 저장
- 뒤집힌 단어들을 출력
💻 코드 구현 (Java)
package partString;
import java.util.*;
public class Problem4 {
public ArrayList<String> solution(int n, String[] str) {
ArrayList<String> answer = new ArrayList<>();
for (String x : str) {
// 방법 1: StringBuilder 활용 (간단한 방법)
// String tmp = new StringBuilder(x).reverse().toString();
// 방법 2: 투 포인터 활용 (직접 뒤집기)
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) {
Problem4 T = new Problem4();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
String[] str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = kb.next();
}
for (String x : T.solution(n, str)) {
System.out.println(x);
}
kb.close();
}
}
📖 코드 설명
1️⃣ StringBuilder.reverse() 활용 (가장 간단한 방법)
String tmp = new StringBuilder(x).reverse().toString();
- ✅ 가독성이 좋고 간결함
- StringBuilder를 사용하여 문자열을 뒤집은 후, toString()으로 변환
2️⃣ 투 포인터를 활용한 직접 뒤집기
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);
- ✅ 배열을 직접 조작하면서 뒤집는 방식
- lt와 rt를 양 끝에서 이동시키며 swap 연산 수행
- while (lt < rt) 조건을 만족하는 동안 계속 교환
⏳ 시간 복잡도 분석
- O(N * M) (N: 단어 개수, M: 단어 길이)
- 각 단어를 한 번씩 뒤집으므로 선형 시간 복잡도를 가짐.
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 1. 문자열 - 6. 중복 문자 제거 (0) | 2025.03.18 |
|---|---|
| 섹션 1. 문자열 - 5. 특정 문자 뒤집기 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 3. 문장 속 단어 (1) | 2025.03.18 |
| 섹션 1. 문자열 - 2. 대소문자 변환 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 1. 문자 찾기 (0) | 2025.03.18 |