알고리즘🅰/제주코딩베이스캠프 프로그래머스 문제 풀이
[알고리즘 풀이 코딩도장] 문자열 압축하기(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
반응형