본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 한 번만 등장한 문자

by nam_ji 2024. 7. 10.

한 번만 등장한 문자

문제

  • 문자열 s가 매개변수로 주어집니다.
  • s에서 한 번만 등장하는 문자를
  • 사전 순으로 정렬한 문자열을 출력하는 문제입니다.
  • 한 번만 등장하는 문자가 없을 경우 빈 문자열을 출력합니다.
  • 입출력 예
    • s result
      "abcabcadc" "d"
      "abdc" "abcd"
      "hello" "eho"


테스트 (인텔리제이)

  • 문자열의 문자를 하나씩 비교할 수 있도록 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;
    }
}