문자열의 문자를 하나씩 비교할 수 있도록 s를 split 메서드를 이용하여 문자별로 나눠서 문자열 배열에 저장합니다.
문자 비교 후 추가하기 편하게 Arrays의 sort 메서드로 문자열 배열을 정렬합니다.
이제 for문으로 문자열 배열 str의 크기만큼 순회하도록 합니다.
첫 번째 for문은 문자 하나를 꺼내 다른 문자들과 비교하기 위함이고 두 번째 for문에서 카운팅 되는 cnt변수를 0으로 초기화 해주는 역할을 합니다.
두 번째 for문도 str의 크기만큼 순회하도록 하고 if문을 이용하여 str[i] 원소와 str[j] 원소들 중에 같은 문자가 있으면 cnt를 1씩 증가하게 해줍니다.
카운팅 된 cnt를 첫 번째 for문에서 if문으로 cnt가 1이면 answer에 해당 문자를 추가하게 했습니다. (1 이상이면 동일한 문자가 있다는 얘기입니다.)
import java.util.Arrays;
public class 한_번만_등장한_문자 {
public static void main(String[] args) {
/*
문자열 s가 매개변수로 주어집니다.
s에서 한 번만 등장하는 문자를
사전 순으로 정렬한 문자열을 출력하는 문제입니다.
한 번만 등장하는 문자가 없을 경우 빈 문자열을 출력합니다.
입출력 예
s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"
입출력 설명
#1
"abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.
#2
"abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.
#3
"hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.
*/
String s = "abcabcadc";
String[] str = s.split("");
Arrays.sort(str);
StringBuilder answer = new StringBuilder();
int cnt = 0;
for (int i = 0; i < str.length; i++) {
cnt = 0;
for (int j = 0; j < str.length; j++) {
if (str[i].equals(str[j])) {
cnt++;
}
}
if (cnt == 1) {
answer.append(str[i]);
}
}
System.out.println(answer);
}
}
프로그래머스 코드
import java.util.*;
class Solution {
public StringBuilder solution(String s) {
String[] str = s.split("");
Arrays.sort(str);
int cnt = 0;
StringBuilder answer = new StringBuilder();
for (int i = 0; i < str.length; i++) {
cnt = 0;
for (int j = 0; j < str.length; j++) {
if (str[i].equals(str[j])) {
cnt++;
}
}
if (cnt == 1) {
answer.append(str[i]);
}
}
return answer;
}
}