4월 20일 오늘의 알고리즘

1.같은 숫자는 싫어

문제 설명
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

입출력 예

arranswer
[1,1,3,3,0,1,1][1,3,0,1]
[4,4,4,3,3][4,3]

나의 풀이

function solution(arr){
    let newArr = []
    for (let i = 0; i< arr.length; i++){
        if (arr[i]!== arr[i+1]){
            newArr.push(arr[i])
        }
    }return newArr
}

새로운 배열을 하나 선언하고 배열의 앞요소와 뒤의 요소가 같지 않을 경우 새로운 배열에 삽입해 준다.

다른사람의 풀이

function solution(arr)
{
    var answer = [];
    for(var i = 0; i<arr.length; i++){
        if(arr[i] == arr[i+1]){
            continue;
        }else{
               answer.push(arr[i])
        }
    }
    return answer;
}

=>나와 풀이법은 같지만 continue를 사용한 경우

function solution(arr)
{
    return arr.filter((val,index) => val != arr[index+1]);
}

=> filter함수를 사용하여 한줄로 풀이

나의 경우 항상 for문을 사용하는 경향이 있는데 앞으로 다양하게 함수를 활용할 필요성이 있다.

2.문자열 내림차순으로 배치하기

문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항
str은 길이 1 이상인 문자열입니다.
입출력 예
s return
"Zbcdefg" "gfedcbZ"

function solution(s) {
   return (s.split("").sort().reverse().join(""))
}

배열에 먼저 담고 정렬하고 뒤집은 다음 join!!! 만족할만한 풀이었다ㅎㅎ

String.prototype.split()
Array.prototype.sort()
Array.prototype.reverse()
Array.prototype.join()

좋은 웹페이지 즐겨찾기