본문 바로가기

코딩테스트 스터디

코딩테스트 연습 - 한 번만 등장한 문자(JAVA)

프로그래머스 코딩테스트 입문 0단계 문제입니다

https://school.programmers.co.kr/learn/courses/30/lessons/120896

📢 문제 설명

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

 

⭕ 정답 코드

1. 나의 풀이

class Solution {
    public String solution(String s) {
        String answer = "";
        
        char[] copy_s = s.toCharArray(); //매개변수 문자열로 char 배열 만들기
        Arrays.sort(copy_s); //알파벳 정렬

        for(char c : copy_s) //알파벳 하나하나 돌면서
            if(s.length() - (s.replaceAll(String.valueOf(c), "")).length() == 1) answer += c+""; //특정 문자의 개수가 1이면 answer에 알파벳 추가

        return answer;
    }
}
  • 자세한 설명은 주석 참고
  • 문자열로 char 배열을 만들고 정렬해준다
  • 반복문 속에서 특정 문자 개수를 계산하고, 1일때만 answer에 추가해준다

2. 다른 분의 풀이

class Solution {
    public String solution(String s) {
        int[] alpha = new int[26]; //총 알파벳 개수만큼 배열 방 생성
        for(char c : s.toCharArray()){
            alpha[c - 'a']++; //아스키코드 값을 이용해 고유의 방 위치 지정, 알파벳 개수 카운트
        }

        StringBuilder answer = new StringBuilder(); //문자열 수정을 위해 StringBuilder 생성 (String보다 효율 좋음)
        for(int i = 0; i < 26; i++){ //총 알파벳 개수만큼 반복
            if(alpha[i] == 1){ //1 카운트인 알파벳만
                answer.append((char)(i + 'a')); //다시 'a'를 더해 answer에 더해준다
            }
        }
        return answer.toString(); //StringBuilder to String
    }
}
  • 자세한 설명은 주석 참고
  • 알파벳별로 고유한 방을 어떻게 만들까 고민하다가 다른 방법으로 풀었는데
  • 이 분의 풀이에서 그 해답을 알려주셔서 가져왔다

 

✅ 회고

java의 Map과 HashSet을 공부할 수 있는 문제였는데 지금은 너무 힘들어서 못하겠다...ㅎㅎ 잊지 말고 기억해둬야지... Map이랑 HashSet 공부하기!