본문 바로가기
개발로그/알고리즘

프로그래머스 Lv.1 문자열 내 마음대로 정렬하기

by 쩜징 2023. 8. 3.

프로그래머스 Lv.1 문자열 내 마음대로 정렬하기


문제 설명

문자열로 구성된 리스트 strings와 정수 n이 주어진다.

각 문자열의 인덱스 n번째 글자를 기준으로

오름차순 정렬을 하려 한다.

정렬된 배열을 return하라.

 

strings는 길이 1 이상, 50이하인 배열입니다.

strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

strings의 원소는 길이 1 이상, 100이하인 문자열입니다.

모든 strings의 원소의 길이는 n보다 큽니다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

strings n return
["sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]

** 풀이 방법

 

이 문제는,, ArrayList로 풀어보려다

결국 풀지 못했다 ㅠㅠ

n번째 인덱스 값이 같을 때 

기존 원소를 사전순으로 정렬하는 부분에서

계속 막혀서 스터디 팀원분의 코드를 참고해서 공부했다.

 

정렬조건을 지정해준다.

n번째 인덱스찾아 정렬

Comparator<String> comparingChar = Comparator.comparing(s->s.substring(n,n+1));

 

stream을 사용해 두 번 정렬해준다.

n번째 인덱스로 정렬을 한 comparingChar 

다음으로 .themComparing()

값이 같을 시 사전순으로 정렬할 수 있도록

오름차순으로 배치해준다.

그리고 이것을 toArray로 변환해주면 끝!

answer = Arrays.stream(strings).sorted(comparingChar.thenComparing(Comparator.naturalOrder())).toArray(String[]::new);

 

<> 전체 코드 </>

import java.util.Arrays;
import java.util.Comparator;
class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        Comparator<String> comparingChar = Comparator.comparing(s->s.substring(n,n+1));

	    answer = Arrays.stream(strings).sorted(comparingChar.thenComparing(Comparator.naturalOrder())).toArray(String[]::new);
        return answer;
    }
}

반응형

댓글