Algorithm/Java

프로그래머스 - 문자열 내 마음대로 정렬하기 java

고고마코드 2022. 7. 1. 14:47
반응형
12915번

코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱

programmers.co.kr


풀이

인덱스 번호=n 의 문자를 비교하는 문제인데,

✔ 주의할 점은 문자가 같을 경우에는 문자열 전체를 비교해야 한다는 점입니다.

 

  • 풀이1
public String[] solution3(String[] strings, int n) {
	Arrays.sort(strings, (s1, s2) -> {
		if (s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
		else return s1.charAt(n) - s2.charAt(n);
	});
	
	return strings;
}

public static <T> void sort(T[] a, Comparator<? super T> c)

정렬할 때 각 인덱스를 조건으로 체크해서 정렬합니다.

람다로 작성했지만, compare() 메소드를 구현한 것으로, 반환값은 [양수, 0, 음수] 를 반환할 수 있습니다.

▶ 양수: 오름차순

▶ 0: 그대로

▶ 음수: 내림차순

 

위에서 설명한 주의할 점만 신경쓰면 됩니다.

인덱스의 문자가 같을 경우 문자열 비교를 통해 정렬 기준을 정합니다.

 

✔ 테스트 케이스 처리속도: 평균 0.9ms / 최대 1.34ms

 

  • 풀이2
public String[] solution(String[] strings, int n) {
	String[] answer = strings;

	for (int i = 0; i < answer.length - 1; i++) {
		for (int j = i + 1; j < answer.length; j++) {
			if (answer[i].charAt(n) > answer[j].charAt(n)) {
				String tmp = answer[j];
				answer[j] = answer[i];
				answer[i] = tmp;
			} else if (answer[i].charAt(n) == answer[j].charAt(n) && answer[i].compareTo(answer[j]) > 0) {
				String tmp = answer[j];
				answer[j] = answer[i];
				answer[i] = tmp;
			}
		}
	}

	return answer;
}

이번엔 순수한 자바 버전의 코드입니다.

선택정렬 방식으로 각 인덱스의 문자를 비교하고

각 인덱스의 문자가 같다면 문자열을 비교해서 정렬하는 방식으로 구현했습니다.

 

✔ 테스트 케이스 처리속도: 평균 0.05ms / 최대 0.22ms

반응형