[Programmers] Lv0 문자열 정리하기(2) JAVA

2023. 1. 20. 23:32CS/자료구조 & 알고리즘

728x90

문제 출처

[프로그래머스 코딩 테스트 연습]

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

  • 먼저 정렬을 하기 전에 먼저 my_string을 소문자로 변경해준다.
  • 소문자로 변경을 해주는 이유는 sort로 정렬을 할시 대문자가 소문자 보다 앞으로 오기 때문이다. Bcad로 예를 들면 Bacd로 정렬이 되기 때문에 소문자로 먼저 변경을 해줘야 한다.
  • 위의 이유는 아스키 코드로 정렬할시 A는 65이고 a는 97이기 때문에 (이는 char형을 정수형 int로 변경하면 같은 값으로 나온다.) sort로 정렬을 한다면 65가 97보다 빠르기 때무에 A 즉 대문자가 먼저 나온다.
  • 이후 StringBuilder에 추가해주면된다.
  • StringBuilder을 사용하는 이유는 문자열을 추가, 수정, 삭제가 많이 일어나는 경우 String 및 StringBuffer보다 빠르기 때문이다.
  • 단 무조건 StringBuilder을 사용하는 것이 아니라 멀티쓰레드를 이용하고 있고 동기화가 필요하면 StringBuffer를 사용해야 된다.
  • 그렇다고 StringBuffer 및 StringBuilder을 무조건 사용해서는 안된다. 문자열 연산을 안하는데 사용하면 오히려 비효율적일 수 도 있기 때문

 

소스 코드

import java.util.Arrays;

public class Solution {
    
    public String solution(String my_string) {
        char[] sorting_str = my_string.toLowerCase().toCharArray();
        Arrays.sort(sorting_str);

        StringBuilder answer = new StringBuilder();

        for (char c : sorting_str)
            answer.append(c);

        return answer.toString();
    }
}
728x90