컨트롤 제트
숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
- 1 ≤ s의 길이 ≤ 200
- -1,000 < s의 원소 중 숫자 < 1,000
- s는 숫자, "Z", 공백으로 이루어져 있습니다.
- s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
- 연속된 공백은 주어지지 않습니다.
- 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
- s는 "Z"로 시작하지 않습니다.
- s의 시작과 끝에는 공백이 없습니다.
- "Z"가 연속해서 나오는 경우는 없습니다.
function solution(s) {
let numbers = [];
let collectNumber = '';
for(let i = 0; i < s.length; i++) {
const item = s[i];
if(item === 'Z') {
numbers.pop();
} else if(item === ' ') {
numbers.push(Number(collectNumber));
collectNumber = '';
} else {
collectNumber += item;
}
}
if(collectNumber !== '') {
numbers.push(Number(collectNumber));
}
let sum = 0;
for(let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
return sum;
}
// 다른 사람의 풀이
function solution(s) {
s = s.split(' ');
let arr = [];
for (let v of s) v === 'Z' ? arr.length ? arr.pop() : '' : arr.push(v);
return arr.reduce((a,v)=>a+ +v,0);
}
function solution(s) {
const stack = []
s.split(' ').forEach((target) => {
if(target === 'Z') stack.pop();
else stack.push(+target)
})
return stack.length ? stack.reduce((pre, cur) => pre + cur) : 0;
}
<다른 사람의 풀이에 대한 이해>
스택처럼 생각하면 된다고, 변수로 아예 명시를 했다. 직관적인 변수 설정이었다.
split()
forEach()
reduce()
배열 원소의 길이
문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.
- 1 ≤ strlist 원소의 길이 ≤ 100
- strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.
function solution(strlist) {
const answer = [];
for(let i = 0; i < strlist.length; i++) {
const item = strlist[i];
answer.push(item.length);
}
return answer;
}
// 다른 사람의 풀이
function solution(strlist) {
return strlist.map((el) => el.length)
}
function solution(strlist) {
var answer = [];
strlist.forEach(el=>answer.push(el.length))
return answer;
}
<다른 사람의 풀이에 대한 이해>
map()
forEach()
중복된 문자 제거
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
- 1 ≤ my_string ≤ 110
- my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
- 대문자와 소문자를 구분합니다.
- 공백(" ")도 하나의 문자로 구분합니다.
- 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.
function solution(my_string) {
let result = '';
for(let i = 0; i < my_string.length; i++) {
const item = my_string[i];
let existed = false;
for(let j = 0; j < result.length; j++) {
if(item == result[j]) {
existed = true;
break;
}
}
if(!existed) {
result += item;
}
}
return result;
}
// 다른 사람의 풀이
function solution(my_string) {
return [...new Set(my_string)].join('');
}
<다른 사람의 풀이에 대한 이해>
new Set()
삼각형의 완성조건 (1)
선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
- sides의 원소는 자연수입니다.
- sides의 길이는 3입니다.
- 1 ≤ sides의 원소 ≤ 1,000
function solution(sides) {
let maxV = -1;
let maxVIdx = -1;
for(let i = 0; i < sides.length; i++) {
const item = sides[i];
if(maxV < item) {
maxV = item;
maxVIdx = i;
}
}
let sum = 0;
for(let i = 0; i < sides.length; i++) {
if(i !== maxVIdx) {
sum += sides[i];
}
}
return maxV < sum ? 1 : 2;
}
// 다른 사람의 풀이
function solution(sides) {
sides.sort((a,b) => a-b)
return sides[0]+sides[1] > sides[2] ? 1 : 2;
}
function solution(sides) {
const [long, a, b] = sides.sort((a,b) => b-a);
return long < a + b ? 1 : 2
}
<다른 사람의 풀이에 대한 이해>
sort()
구조분해 할당을 통해 직관적으로 코드를 작성
참고 영상
'코딩테스트 > 프로그래머스 0단계 - 입문' 카테고리의 다른 글
프로그래머스 0단계 - Day15 문자열, 해시, 배열, 수학 (0) | 2024.03.21 |
---|---|
프로그래머스 0단계 - Day14 조건문, 반복문, 시뮬레이션, 문자열 (0) | 2024.03.20 |
프로그래머스 0단계 - Day12 문자열, 정렬, 사칙연산, 수학 (0) | 2024.03.19 |
프로그래머스 0단계 - Day11 수학, 반복문 (0) | 2024.03.19 |
프로그래머스 0단계 - Day10 조건문, 배열, 수학, 시뮬레이션 (0) | 2024.03.18 |
댓글