한 번만 등장한 문자 - 프로그래머스

Yuno·2024년 7월 1일

Java)코테 연습

목록 보기
6/18

https://school.programmers.co.kr/learn/courses/30/lessons/120896?language=java

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public String solution(String s) {
        ArrayList<Character> list = new ArrayList<>();
        for (char c : s.toCharArray()) {
            list.add(c);
        }
        Collections.sort(list);

        Map<Character, Integer> map = new HashMap<>();
        for (char c : list) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }

        StringBuilder sb = new StringBuilder();
        for (char c : list) {
            if (map.get(c) == 1) {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}

문제풀이

접근방식

문자열 중 문자 빈도수를 계산하기 위해 HashMap을 이용하였고, 사전적 정렬된 상태로 출력하기 위해 ArrayList의 sort를 이용.

  1. ArrayList와 문자열 변환
  • ArrayList<Character> list = new ArrayList<>(); : 문자를 담기위한 ArrayList 객체 list 생성. 이 리스트는 문자열 s 의 각 문자를 담기 위해 사용
  • for (char c : s.toCharArray()) { list.add(c); } : s.toCharArray() 를 통해 문자열 s 를 문자 배열로 변환하고, 각 문자 c 를 리스트 list 에 추가
  1. 정렬
  • Collections.sort(list); : Collections 클래스를 사용하여 리스트 list 를 알파벳 순서로 정렬. 이로써 리스트에 저장된 문자들이 알파벳 순서대로 정렬
  1. 빈도 계산을 위해 HashMap 사용
  • Map<Character, Integer> map = new HashMap<>(); : 각 문자의 등장 빈도를 저장하기 위해 HashMap 객체 map 을 생성. 여기서 Character는 문자를, Integer는 해당 문자와 빈도를 나타냄

  • for (char c : list) { map.put(c, map.getOrDefault(c, 0) + 1) } : 정렬된 리시트 list를 순회하며 각 문자 c 가 map에 존재하는지 확인. 이미 존재한다면, 기존 값에 1을 더하고, 존재하지 않는다면 기본값 0에 1을 더하여 map에 저장

  1. 한번만 등장하는 문자 찾기
  • StringBuilder sb = new StringBuilder(); : 한번만 등장하는 문자들을 저장하기 위한 StringBuilder 객체 sb 를 생성. StringBuilder 는 문자열을 효율적으로 추가하고 수정할 수 있는 클래스.

  • for (char c : list) { if (map.get(c) == 1) } : 정렬된 리스트 list를 순회하며 각 문자 c 의 빈도를 map에서 확인. 빈도가 1인 경우 map.get(c) == 1 해당문자 c를 sb에 추가

profile
Hello World

0개의 댓글