개발조각

[알고리즘 풀이_Lv0] 배열 회전시키기, 외계행성의 나이, 369게임, 중복된 문자 제거 본문

알고리즘🅰/제주코딩베이스캠프 프로그래머스 문제 풀이

[알고리즘 풀이_Lv0] 배열 회전시키기, 외계행성의 나이, 369게임, 중복된 문자 제거

개발조각 2023. 3. 13. 15:02
728x90
반응형

*제주코딩베이스캠프의 JavaScript 알고리즘 100일 챌린지를 참고로 정리하고 있습니다.*

 

배열 회전시키기_16번째

문제


https://school.programmers.co.kr/learn/courses/30/lessons/120844

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 

배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

 

 

소스코드


// 방법1
function solution(numbers, direction) {
    if(direction === 'right'){
        numbers.unshift(numbers.pop());
    }else{
        numbers.push(numbers.shift());
    }
    return numbers
}

// unshift: 새로운 요소를 배열의 맨 앞쪽에 추가, 새로운 길이를 반환
// pop: 배열에서 마지막 요소를 제거, 그 요소 반환

// shift:  배열에서 첫 번째 요소를 제거, 제거된 요소 반환
// push: 배열의 끝에 하나 이상의 요소를 추가, 새로운 길이를 반환

 

// 방법2
function solution(numbers, direction) {
    if(direction === 'right'){
        numbers = [numbers.pop(), ...numbers];
    }else{
        numbers = [...numbers.slice(1), numbers.shift()]; 
    }
    return numbers
}

// slice(begin, end): 배열의 begin 부터 end 까지(end 미포함) 제거 (얕은 복사)
// slice(1): 배열의 0번만 제거

외계행성의 나이_17번째

문제


https://school.programmers.co.kr/learn/courses/30/lessons/120834

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 

입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. 

a는 0, b는 1, c는 2, ..., j는 9입니다. 

예를 들어 23살은 cd, 51살은 fb로 표현합니다. 

나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

 

해결방안


age.toString() // '23'
Array(age.toString()) // ['23']
Array.from(age.toString()) // ['2', '3']
Array.from(23) // []
Array.from(age.toString()).map(v=>chr[v]) // ['c', 'd']

 

소스코드


function solution(age) {
    let chr = 'abcdefghij'
    return Array.from(age.toString()).map(v=> chr[v]).join('')
}

아래와 같이 써도 상관 없다.

function solution(age) {
    return Array.from(age.toString()).map(v=> 'abcdefghij'[v]).join('')
}

369게임_18번째

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120891

머쓱이는 친구들과 369게임을 하고 있습니다. 

369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 

머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 

머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

 

소스코드


방법1_정규식

function solution(order) {
    return order.toString().match(/[369]/g).length;
}

// order.toString().match(/[369]/g) // ['3']
// 이렇게 쓰면 테스트 3번, 7번에 실패 (런타임 에러)가 난다.

이렇게 쓰면 테스트 3번, 7번에 실패 (런타임 에러)가 난다.

이유. order.toString().match(/[369]/g)이게 null이기 때문에 에러 발생

let order = 1;
return order.toString().match(/[369]/g).length; // 에러
order.toString().match(/[369]/g) // null

 

해결방법. 널 병합 연산자(??)를 사용하면 된다.

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing

 

Nullish coalescing operator - JavaScript | MDN

널 병합 연산자 (??) 는 왼쪽 피연산자가 null 또는 undefined일 때 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자이다.

developer.mozilla.org

널 병합 연산자 (??)
왼쪽 피연산자가 null 또는 undefined일 때
오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자이다.

 

최종

// 방법1_정규식
function solution(order) {
	// null이면 [] 아니면 order.toString().match(/[369]/g)
    let value = order.toString().match(/[369]/g) ?? [];
    return value.length;
}

 

방법2_filter

// 방법2_filter
function solution(order) {
    return order.toString().split('').filter(v=> v == '3' || v == '6' || v == '9' ? true : false).length
}

// order.toString().split('').filter(v=> v == '3' || v == '6' || v == '9' ? true : false)
// ['3']

 

 

방법3_set, filter

function solution(order) {
    const s = new Set('369')
    return order.toString().split('').filter(v=> s.has(v)).length;
}

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set/has

 

Set.prototype.has() - JavaScript | MDN

has() 메서드는 Set 객체에 주어진 요소가 존재하는지 여부를 판별해 반환합니다.

developer.mozilla.org

has()
Set 객체에 주어진 요소가 존재하는지 여부를 판별해 반환합니다.

중복된 문자 제거_19번째

문제


https://school.programmers.co.kr/learn/courses/30/lessons/120888
문자열 my_string이 매개변수로 주어집니다. 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

 

해결방안


// 파이썬
set(my_string) // {'e', 'l', 'o', 'p'}

파이썬에서 set을 쓰면 순서를 보장하지 않는다.

 

// 자바스크립트
new Set(my_string) // { 'p', 'e', 'o', 'l' }

자바스크립트에서는 set을 사용해도 순서를 보장한다.

 

 

소스코드


function solution(my_string) {
    return [...new Set(my_string)].join('');
}

 

 

728x90
반응형
Comments