5. [Java] 한 번만 등장한 문자 (문자열) - sb.toString();
https://school.programmers.co.kr/learn/courses/30/lessons/120896
틀린 코드
import java.util.*;
class Solution {
public String solution(String s) {
int[] cnt = new int[26];
for(char c : s.toCharArray()) {
cnt[c - 'a']++;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 26; i++) {
if (cnt[i] == 1) sb.append((char)i+'a');
}
return sb.toString();
}
}
✅ sb.append((char)i + 'a');
- 이 int를 char 타입으로 형변환하려는 의도지만, 실제로는 그냥 int로 연산된다.
- 예를 들어, i = 0일 때 char는 연산 시 int로 자동 변환되므로 → 0 + 97
(char)i + 'a' // => 정수 + 정수 → int로 연산됨
→ i + 'a' 전체를 char로 캐스팅해야 문자로 제대로 변환된다.
sb.append((char)(i + 'a'));
개선한 코드
import java.util.*;
class Solution {
public String solution(String s) {
int[] cnt = new int[26];
for(char c : s.toCharArray()) {
cnt[c - 'a']++;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 26; i++) {
if (cnt[i] == 1) sb.append((char)(i + 'a'));
}
return sb.toString();
}
}