verdantjuly/코딩테스트
프로그래머스 코딩테스트 : 문자열 내 마음대로 정렬하기
verdantjuly
2023. 5. 24. 18:22
728x90
튜터 님께 여쭤봤는데 일반적으로 알고리즘 테스트에서는 sort를 사용하지 않으나 너무 어렵고 막히면 사용하라고 하셨다.
현업에서는 sort하면 된다고 하셨다.
참고 자료 : 정렬 알고리즘 https://im-developer.tistory.com/133
나의 풀이 1 pass
// sort 라는 것을 배우지 않아 사용하지 않고 진행하려고 하였으나
// 시간이 너무 지체되어 마지막 if문의 else 에서 사용함.
// 문자열로 구성된 리스트 strings
// 정수 n
// 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
// 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
// 모든 strings의 원소의 길이는 n보다 큽니다.
function orem(strings, n) {
let array = [];
let array2 = [];
let newstrings = [];
for (i = 0; i < strings.length; i++) {
array.push(strings[i][n])
// array : i 번째 stirngs의 문자열을 하나씩 쪼갠 배열을 array라는 배열의 요소로 모아준다.
// 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
if (array[i] < array[i + 1]) {
newstrings.unshift(strings[i]);
} else if (array[i] > array[i + 1]) {
newstrings.push(strings[i]);
} else{
newstrings.unshift(strings[i]);
newstrings.sort()
}
}
console.log(newstrings)
}
orem(["abce", "abcd", "cdx"], 2)
나의 풀이 2
예제에서는 pass 이나 프로그래머스에서 다른 입출력 예시로 진행하면 fail
// 문자열로 구성된 리스트 strings
// 정수 n
// 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
// 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
// 모든 strings의 원소의 길이는 n보다 큽니다.
function orem(strings, n) {
let arrayN = []
for (k = 0; k < strings.length; k++) {
for (i = 0; i < strings.length - 1-k; i++) {
for (j = 0; j < strings.length; j++) {
arrayN[j] = strings[j].substr(n)
// strings의 각 문자열을 인덱스 n부터 자른 것을 arrayN에 담는다.
}
if (arrayN[i] > arrayN[i + 1]) { //앞 단어가 더 클 때
let spin =[]
spin = strings[i]
strings[i] = strings[i + 1]
strings[i + 1] = spin //뒷 단어를 앞으로 당긴다
}}
}
console.log(strings)
}
orem(["abce", "abcd", "cdx"], 2)
다른 사람의 풀이
캠프 대원 익명 님의 풀이 pass
function solution(strings, n) {
let arr = [];
strings.forEach((i) => {
arr.push(i[n] + i);
});
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let copy = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = copy;
}
}
}
let result = [];
arr.forEach((i) => {
result.push(i.slice(1));
});
return result;
}
return strings.sort().map((val) => `${val[n]}${val}`).sort().map((val) => val.slice(1))
캠프 대원 인한별 님의 풀이 pass
return strings.sort().sort((a, b) => a[n] < b[n] ? -1 : 0);
익명 님의 풀이 pass
function solution(strings, n) {
for (let i = 0; i < strings.length; i += 1) {
for (let j = 0; j < strings.length - i - 1; j += 1) {
if (strings[j].charCodeAt(n) > strings[j + 1].charCodeAt(n)) {
// swap
let temp = strings[j];
strings[j] = strings[j + 1];
strings[j + 1] = temp;
} else if (strings[j].charCodeAt(n) === strings[j + 1].charCodeAt(n)) {
if (strings[j] > strings[j + 1]) {
let temp = strings[j];
strings[j] = strings[j + 1];
strings[j + 1] = temp;
}
}
}
}
return strings;
}
소감
강의 밖에 많은 것을 배워야 한다는 생각이 들었다. 자만하지 말자. 네버...