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

[알고리즘 풀이 코딩도장] 문자열 압축하기(Lv2), Special Sort(Lv1)

개발조각 2023. 3. 24. 12:30
728x90
반응형

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

36~50까지는 코딩도장에서 Lv. 2~3

 

문자열 압축하기_38번째

문제


https://codingdojang.com/scode/465?answer_mode=hide 

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

codingdojang.com

문자열을 입력받아서, 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시하여 문자열을 압축하기.

입력 예시: aaabbcccccca

출력 예시: a3b2c6a1

 

자주 출제되는 문제 중 하나

 

해결방안


방법1_for문

const s = 'aaabbcccccca';

let result = s[0]
let count = 0

for(let str of s){
	console.log(str)
}
// a (3)
// b (2)
// c (6)
// a

 

const s = 'aaabbcccccca';

let result = s[0]
let count = 0

for(let str of s){
	console.log(result)
    if(str == result.slice(-1)){
    	count += 1
    }else{
    	result += count + str
        count = 1
    }
}
// a (4)
// a3b (2)
// a3b2c (1)

return result // 'a3b2c6a'

 

const s = 'aaabbcccccca';

let result = s[0]
let count = 0

for(let str of s){
	console.log(result)
    if(str == result.slice(-1)){
    	count += 1
    }else{
    	result += count + str
        count = 1
    }
}
// a (4)
// a3b (2)
// a3b2c (1)

return result += count // 'a3b2c6a1'

 

방법2_정규식

const s = 'aaabbcccccca';
const reg = /(\w)\1*/g
// \w 문자열
// \1 재참조 메타문자
// * 0부터 여러번 반복

return [...s.matchAll(reg)]
// (2) ['aaa', 'a', index:0, input: 'aaabbcccccca', groups: undefined] -> a가 3개 있다.
// (2) ['bb', 'b', index:0, input: 'aaabbcccccca', groups: undefined] -> b가 2개 있다.
// (2) ['cccccc', 'c', index:0, input: 'aaabbcccccca', groups: undefined] -> c가 6개 있다.
// (2) ['a', 'a', index:0, input: 'aaabbcccccca', groups: undefined] -> a가 1개 있다.

 

소스코드


// 방법1_for문
const s = 'aaabbcccccca';

let result = s[0]
let count = 0

for(let str of s){
	console.log(result)
    if(str == result.slice(-1)){
    	count += 1
    }else{
    	result += count + str
        count = 1
    }
}

return result += count // 'a3b2c6a1'

 

// 방법2_정규식
const s = 'aaabbcccccca';
const reg = /(\w)\1*/g
// \w 문자열
// \1 재참조 메타문자
// * 0부터 여러번 반복

return [...s.matchAll(reg)]
// (2) ['aaa', 'a', index:0, input: 'aaabbcccccca', groups: undefined] -> a가 3개 있다.
// (2) ['bb', 'b', index:0, input: 'aaabbcccccca', groups: undefined] -> b가 2개 있다.
// (2) ['cccccc', 'c', index:0, input: 'aaabbcccccca', groups: undefined] -> c가 6개 있다.
// (2) ['a', 'a', index:0, input: 'aaabbcccccca', groups: undefined] -> a가 1개 있다.

Special Sort_39번째

문제


https://codingdojang.com/scode/414

구글 전화면접 문제

n개의 정수를 가진 배열이 있다. 이 배열은 양의정수와 음의 정수를 모두 가지고 있다. 이제 당신은 이 배열을 좀 특별한 방법으로 정렬해야 한다.

정렬이 되고 난 후, 음의 정수는 앞쪽에 양의정수는 뒷쪽에 있어야 한다. 또한 양의정수와 음의정수의 순서에는 변함이 없어야 한다.

예. -1 1 3 -2 2 ans: -1 -2 1 3 2.

 

 

해결방안


funtion solution(value){
	return value.filter(v => v < 0)
}

solution([-1 1 3 -2 2])
// [-1, -2]

 

전개방법1

funtion solution(value){
	return value.filter(v => v < 0).concat(value.filter(v => v >= 0))
}

solution([-1 1 3 -2 2])
// [-1, -2, 1, 3, 2]

 

전개방법2

funtion solution(value){
	return [...value.filter(v => v < 0), ...value.filter(v => v >= 0)]
}

solution([-1 1 3 -2 2])
// [-1, -2, 1, 3, 2]

 

소스코드


// 방법1_concat
funtion solution(value){
	return value.filter(v => v < 0).concat(value.filter(v => v >= 0))
}
solution([-1 1 3 -2 2])

 

// 방법2_spread
funtion solution(value){
	return [...value.filter(v => v < 0), ...value.filter(v => v >= 0)]
}
solution([-1 1 3 -2 2])
728x90
반응형