🔸 문제 설명
문자열 my_string에서
num1번째 문자와 num2번째 문자의 위치를 바꾼 문자열을 반환하는 문제입니다.
🔸 입출력 예
my_string | num1 | num2 | 결과 |
"hello" | 1 | 2 | "hlelo" |
"I love you" | 3 | 6 | "I l veoyou" |
✅ 기본 풀이 아이디어
자바의 String은 수정이 불가능(immutable) 하기 때문에
문자열을 char[]로 바꿔서 → 문자를 바꾸고 → 다시 문자열로 만들어야 함
그래서 순서는 이렇게:
1. 문자열 → 문자 배열 (toCharArray)
2. 문자 교환
3. 문자 배열 → 문자열 (String.valueOf)
✅ 1. 처음 작성한 버전 (원래 버전)
class Solution {
public String solution(String my_string, int num1, int num2) {
char[] ch = my_string.toCharArray();
ch[num1] = my_string.charAt(num2);
ch[num2] = my_string.charAt(num1);
return String.valueOf(ch);
}
}
❗ 여기서 내가 헷갈렸던 부분은?
🔹 toCharArray()가 뭐야?
- "hello" → ['h', 'e', 'l', 'l', 'o'] 로 바꿔줌
- 즉, 문자 하나씩 바꾸고 싶을 때 필수 도구!
🔹 String.valueOf(char[])는?
- 문자 배열을 다시 문자열로 바꾸는 함수
- ['h', 'l', 'e', 'l', 'o'] → "hlelo"
❗ 그런데 위 코드는 문제 있을 수도 있어!
ch[num1] = my_string.charAt(num2);
ch[num2] = my_string.charAt(num1); // 이 시점에서 ch[num1]은 이미 바뀐 상태!
첫 번째 교환이 끝나고 나면 my_string.charAt(num1) 값이 바뀌기 때문에
원래 값을 임시로 저장해두는 게 더 안전해요
✅ 2. 안전한 버전
class Solution {
public String solution(String my_string, int num1, int num2) {
char[] ch = my_string.toCharArray();
char temp = ch[num1];
ch[num1] = ch[num2];
ch[num2] = temp;
return String.valueOf(ch);
}
}
💡 핵심 개념 요약
개념 | 설명 |
toCharArray() | 문자열 → 문자 배열 |
charAt(index) | 문자열에서 문자 하나 꺼내기 |
String.valueOf(char[]) | 문자 배열 → 문자열 |
교환할 땐 temp 변수 사용 | 값을 덮어쓰지 않기 위해 안전하게 처리 |
💬 느낀 점
처음에는 "문자 하나 바꾸는 건데 왜 이렇게 복잡하지?" 싶었지만,
자바에서는 문자열은 불변이기 때문에
char[]로 변환해서 바꾸고 다시 문자열로 만들어야 한다는 걸 배웠다.
특히 toCharArray()와 String.valueOf()는
문자열 문제에서 자주 쓰는 핵심 함수라 꼭 익혀두자!
'코딩테스트' 카테고리의 다른 글
[코딩테스트 입문] 공 던지기 (0) | 2025.04.29 |
---|---|
[코딩테스트 입문] 숫자 찾기 – 문자열 indexOf로 한 줄 해결! ★ (0) | 2025.04.23 |
[코딩테스트 입문] 대문자와 소문자 (0) | 2025.04.23 |
[코딩테스트 입문] 구슬을 나누는 경우의 수 (nCr) ★★★ (0) | 2025.04.23 |
[코딩테스트 입문] 모스부호 (1) ★ (0) | 2025.04.23 |