상세 컨텐츠

본문 제목

#6. 숙제 - 문자열 임의대로 정렬

내일배움캠프 학습/JavaScript

by 남민우_ 2024. 11. 5. 19:46

본문

문제

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

제한 조건

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

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

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

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

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

 

function Solution(strings, n)
{	
	let answer = [];
	for(let i = 0; i<strings.length; i++)
	{
		strings[i] = strings[i][n] + strings[i];
	}
	strings.sort();
	for(let i = 0; i<strings.length; i++)
	{
		answer.push(strings[i].replace(strings[i][0], ""));
	}
	return answer;
}

 

코드 작성 후, for 문의 두번 사용이 문제에 비해 연산을 너무 잡아먹는다고 생각해 다른 사람들의 풀이를 찾아보던 중 좋은 코드가 있어 같이 첨부한다.

function Solution(strings, n)
{	
	return strings.sort((s1, s2) => s1[n] === s2[n] ? 
		s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

해석한 바는 다음과 같다.

1. Sort() 를 통해 정렬 후 return 하는데, 화살표 함수를 통해 정해진 기준으로 비교 후 정렬

2. 두 인자(s1, s2) 를 놓고 차례대로 비교, s1[n] 과 s2[n] 을 비교해 같은지 여부 판단을 먼저 한다

2-1. 같은 경우, 문제에 따라 사전순대로 정렬하기 위해 s1 과 s2 를 비교 : localeCompare()

2-2. 다른 경우, s1[n] 과 s2[n] 만 추출 후 비교

이 2-2의 문자열이 다른 경우 n, 즉 정한 순번의 문자값에 따라서 정렬되는 과정이다.

'내일배움캠프 학습 > JavaScript' 카테고리의 다른 글

#8. 실행 컨텍스트  (3) 2024.11.07
#7. 데이터 타입 심화  (6) 2024.11.06
#5. 일급 객체, Map  (4) 2024.11.05
#4. ES6 - JavaScript Version  (0) 2024.11.05
#3. 자바스크립트의 기초_1주차 숙제  (0) 2024.11.04

관련글 더보기