Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- NextJS v13
- 중복선택
- 배열 중복 제거
- 항해99추천
- 항해99후기
- 클라이언트 컴포넌트
- server component
- 실전프로젝트
- 백준
- react
- 항해99
- 로딩 후 실행
- 숫자를 별점으로
- 항해99솔직후기
- 동전 0
- 알고리즘
- 카테고리필터
- 자바스크립트
- 배열 메소드
- greedy
- 그리디
- db수정
- 서버 컴포넌트
- 프로그래머스
- 부트캠프항해
- 탐욕알고리즘
- jQuery
- JavaScript
- 중복카테고리
- 날씨 api
Archives
- Today
- Total
공부 및 일상기록
문자열 내 마음대로 정렬하기 본문
문제설명
문제
- 문자열로 구성된 배열 strings와 정수 n이 주어짐
- 각 문자열의 n번째 인덱스 글자를 기준으로 오름차순 정렬할것
제한조건
- strings는 길이 1 이상, 50 이하인 배열
- 원소는 모두 소문자
- 모든 strings의 원소의 길이는 n보다 큼
- 만약 n번째 인덱스의 문자가 같은 원소가 여러개면 사전순으로 정렬
문제풀이
나의 접근 방식
먼저 인접한 두 인덱스를 비교하여 작은것은 앞으로, 큰것은 뒤로 보내면서 정렬을 시도해야 겠다고 생각했다.
따라서 for문을 이용하는데, 이렇게 for문 1개만 사용하면 제일 큰 숫자만 제일 뒤에 있게되고 나머지는 그대로이다.
그래서 for문 안에서 또다른 for문을 넣고, 안쪽 for문은 이미 정렬된 제일 큰 숫자를 건들 필요가 없으므로 바깥쪽 for문의 i만큼 짧은 길이를 검사했다.
이러한 접근 방식을 버블정렬이라고 한다.
인접한 두 인덱스의 값을 비교 후, 위치를 교환하기 위해 변수 a를 선언해 ㅑ인덱스 값을 복사해두고, i인덱스에 i+1인덱스 값을 넣은 후, i+1에는 다시 변수 a를 할당해 위치를 바꾼다.
실제 작성한 코드
//일단 같은 문자열일 경우 사전순으로 정렬되도록 하기 위해 미리 sort함수로 정렬하고 시작했다.
function solution(strings, n) {
strings.sort();
//2중 for문을 도입하여 인접한 두 수를 비교 하고, 대소비교를 해서 서로의 위치를 바꾼다. 이렇게하면 제일 큰 수는 제일 뒤에 위치하게 된다.
//따라서 제일 큰 수는 건들 필요가 없으므로 안쪽 for문에서 strings.length-i-1을 한다.
for (let i = 0; i < strings.length; i++) {
for (let j = 0; j < strings.length - i - 1; j++) {
if (strings[j][n] > strings[j + 1][n]) {
// j와 j+1의 자리를 바꿔치기 위해서 일단 변수 a에 담아 j번째를 담아 교환한다.
let a = strings[j];
strings[j] = strings[j + 1];
strings[j + 1] = a;
}
}
}
return strings;
}
'개발 > 알고리즘, 자료구조' 카테고리의 다른 글
[알고리즘] 약수의 개수와 덧셈 (0) | 2023.04.20 |
---|---|
[알고리즘] 폰켓몬 (0) | 2023.04.20 |
[알고리즘, 자료구조] 해시테이블(Hash table) (0) | 2023.01.11 |
[알고리즘, 자료구조] 스택과 큐 (0) | 2023.01.11 |
[알고리즘, 자료구조] 트리와 그래프 (0) | 2023.01.11 |