(level1, sort) 문자열의 내림차순으로 정렬

  • by

1. 문제


2. 문제 해결 로직

1. 문제 이해

  • 주어진 것
    • String s // 임의의 정렬할 문자열
  • 필요한 것
    • 문자열 응답 //내림차순 정렬된 문자열

2. 데이터 구조 결정

  • StringBuilder 사용
    • 문자열을 동적으로 생성하고 변경할 때 유용한 클래스
    • StringBuilder의 주요 메소드
      • append() : 문자열 뒤에 추가
      • insert() : 지정된 위치에 삽입
      • delete() : 지정된 시작 인덱스와 종료 인덱스 사이의 문자열 삭제
      • replace() : 지정된 시작 인덱스와 종료 인덱스 사이의 문자열을 다른 값으로 바꿉니다.

      • reverse() : 문자열을 반대로 반전
      • toString() : StringBuilder 객체를 String 객체로 변환하여 반환
  • 방법 1. 정렬 방법 사용
    • Arrays.sort (정렬 대상, Comparator (정렬 기준))
    • Collections.sort (정렬 대상, Comparator (정렬 기준))
      • Comparator가 부의 값을 돌려준다 -> 오름차순
      • Comparator가 양의 반환 -> 내림차순으로 정렬
  • 방법 2. Stream API 사용
    • 함수형 프로그래밍 스타일로 데이터 처리

3. 알고리즘 설계

3-1. Character 배열 -> Arrays.sort -> StringBuilder

3-2. 목록 -> 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. 목록 -> 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()
        	
            //각 문자를 Character 객체로 변환
            .mapToObj(c -> (char) c)
            
            //sorted,Comparator로 내림차순 정렬
            .sorted(Comparator.reverseOrder())
            
            //각 Character 객체를 문자열로 변환
            .map(String::valueOf)
            
            //정렬된 문자열을 하나의 문자열로 결합
            .collect(Collectors.joining());
    }
}

*Reference

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

프로그래머스

코드 중심 개발자 채용. 스택 기반 포지션 매칭 프로그래머스 개발자를 위한 커스텀 프로파일을 등록하고 나와 기술의 궁합이 잘 맞는 기업을 매칭합니다.

programmers.co.kr