1. 문제

2. 문제 해결 논리
- 문제 이해
- 주어진 것
- String s //임의의 정렬할 문자열
 
 - 요구되는 것
- String answer //내림차순 정렬된 문자열
 
 
 - 주어진 것
 - 데이터 구조 결정
- StringBuilder 사용
- 문자열을 동적으로 생성 및 수정할 때 유용한 클래스
 - StringBuilder의 주요 메소드
- append() : 문자열 뒤에 추가
 - insert() : 지정된 위치에 삽입
 - delete() : 지정된 시작과 끝 인덱스 사이의 문자열 삭제
 - replace() : 지정된 시작과 끝 인덱스 사이의 문자열을 다른 값으로 대체
 - reverse() : 문자열을 거꾸로 뒤집기
 - toString() : StringBuilder 객체를 String 객체로 변환하여 반환
 
 
 - 방법 1. 정렬 메소드 사용
- Arrays.sort(정렬 대상, Comparator[정렬기준])
 - Collections.sort(정렬 대상, Comparator[정렬기준])
- Comparator가 음수 반환 -> 오름차순 정렬
 - Comparator가 양수 반환 -> 내림차순 정렬
 
 
 - 방법 2. Stream API 사용
- 함수형 프로그래밍 스타일로 데이터 처리
 
 
 - StringBuilder 사용
 - 알고리즘 설계
 
3-1. Character배열 -> Arrays.sort -> StringBuilder
3-2. List -> Collections.sort -> StringBuilder
3-3. Stream API
3. 코드 구현
3-1. Character 배열 -> Arrays.sort -> StringBuilder
import java.util.*;
class Solution {
    public String solution(String s) {
    	//Charater배열 생성
        Character[] characters = new Character[s.length()];
		
        //String -> Character배열 변환
        for (int i = 0; i < s.length(); i++) {
            characters[i] = s.charAt(i);
        }
		
        //Arrays.sort메소드로 배열 내림차순 정렬
        Arrays.sort(characters, Comparator.reverseOrder());
		
        //StringBuilder 생성
        StringBuilder sb = new StringBuilder();
		
        //Character배열 -> StringBuilder 변환
        for (Character character : characters) {
            sb.append(character);
        }
        
        //StringBuilder -> String 변환 및 반환
        return sb.toString();
    }
}
3-2. List -> Collections.sort -> StringBuilder
import java.util.*;
class Solution {
    public String solution(String s) {
    	//List 생성
        List<Character> characters = new ArrayList<>();
		
        //String -> List 변환
        for (int i = 0; i < s.length(); i++) {
            characters.add(s.charAt(i));
        }
		
        //Collections.sort로 List 내림차순 정렬
        //람다식 대신 Comparator.reversOrder()도 가능
        Collections.sort(characters, (a, b) -> b.compareTo(a));
		
        //StringBuilder 생성
        StringBuilder sb = new StringBuilder();
		
        
       	//List -> StringBuilder 변환
        for (Character character : characters) {
            sb.append(character);
        }
		
        
        //StringBuilder -> String 변환 및 반환
        return sb.toString();
    }
}
3-3. Stream API
import java.util.Comparator;
import java.util.stream.*;
class Solution {
    public String solution(String s) {
    	//String -> IntStream 변환
        return s.chars()
        	
            //각 문자(int형)를 Character 객체로 변환 및 Stream으로 반환
            .mapToObj(c -> (char) c)
            
            //sorted,Comparator로 내림차순 정렬 및 Stream으로 반환
            .sorted(Comparator.reverseOrder())
            
            //각 Character 객체를 문자열로 변환 및 Stream으로 반환
            .map(String::valueOf)
            
            //정렬된 문자열을 하나의 문자열로 결합
            .collect(Collectors.joining());
    }
}
* Reference
https://school.programmers.co.kr/learn/courses/30/lessons/12917
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
    
    
    
  'PS > Programmers' 카테고리의 다른 글
| [level1, Stack/Queue] 같은 숫자는 싫어 (0) | 2023.03.20 | 
|---|---|
| [level1, 유클리드 호제법] 최대공약수와 최소공배수 (0) | 2023.03.19 | 
| [level1, array] 행렬의 덧셈 (0) | 2023.03.19 | 
| [level1, StringBuilder] 수박수박수박수? (0) | 2023.03.18 | 
| [level1, Map] 신고 결과 받기 (0) | 2023.03.16 |