"나는 무엇을 풀었는가" 시리즈는 이렇게 시작했습니다.
- 취업 준비 중 몇 번의 코딩테스트를 보며 깨달은 것이 있습니다. 바로 "기초가 중요하다"는 것입니다. 그리하여 프로그래머스 Level.0부터 차근차근 다시 풀어보려고 합니다.
- 단지 문제를 푸는 것보단, 왜 해당 함수를 썼는지 더 재사용이나 가독성을 높일 방법은 없는지, 그리고 해당 함수가 없다면 어떻게 풀 수 있을지와 같이 다양한 방법과 생각을 통해 사고력을 높이려고 노력합니다.
- 그럼 레츠 고 !
문제설명 : 오늘 해야 할 일이 담긴 문자열 배열 todo_list와 각각의 일을 지금 마쳤는지를 나타내는 boolean 배열 finished가 매개변수로 주어질 때, todo_list에서 아직 마치지 못한 일들을 순서대로 담은 문자열 배열을 리턴하세요.
입/출력 :
console.log(solution(
["problemsolving", "practiceguitar", "swim", "studygraph"],
[true, false, true, false])); // ["practiceguitar", "studygraph"]
function solution(todo_list, finished) {
let result = todo_list.filter((_, idx) => finished[idx] === false);
return result;
};
function solution(todo_list, finished) {
let arr = [];
for (let i = 0; i < todo_list.length; i++) {
if (finished[i] === false) {
arr.push(todo_list[i]);
}
}
return arr;
}
문제설명 : myString에서 알파벳 "a"가 등장하면 전부 "A"로 변환하고, "A"가 아닌 모든 대문자 알파벳은 소문자 알파벳으로 변환해 리턴하세요.
입/출력 :
console.log(solution("PrOgRaMmErS")) // "progrAmmers"
function solution(myString) {
return myString.toLowerCase().replaceAll('a', 'A');
}
function solution(myString) {
let result = "";
for (let i = 0; i < myString.length; i++) {
if (myString[i] === 'a' || myString[i] === 'A') {
result += "A";
} else {
result += myString[i].toLowerCase();
}
}
return result;
}
문제설명 : my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 리턴하세요.
입/출력 :
console.log(solution("zpiaz", [1, 2, 0, 0, 3])); // "pizza"
function solution(my_string, index_list) {
return index_list.map(i => my_string[i]).join('');
}
function solution(my_string, index_list) {
let answer = "";
for (let i of index_list) {
answer += my_string[i]
}
return answer;
}
문제설명 : my_string을 k번 반복한 문자열을 리턴하세요.
입/출력 :
console.log(solution("string", 3)); // "stringstringstring"
function solution(my_string, k) {
return my_string.repeat(k);
}
function solution(my_string, k) {
let answer = "";
for (let i = 0; i < k; i++) {
answer += my_string;
}
return answer;
}
문제설명 : 한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 리턴하세요.
입/출력 :
console.log(solution("123456789")); // 45
function solution(num_str) {
return [...num_str].map(Number).reduce((acc, cur) => acc + cur, 0);
}
function solution(num_str) {
let answer = 0;
for (let num of num_str) {
answer += Number(num);
}
return answer;
}
문제설명 : num_list안에 n이 있으면 1을 없으면 0을 리턴하세요.
입/출력 :
console.log(solution([1, 2, 3, 4, 5], 3)); // 1
function solution(num, n) {
if (num.includes(n)) {
return 1;
} else {
return 0;
}
}
function solution(num, n) {
for (let i of num) {
if (i === n) {
return 1;
}
}
return 0;
}
문제설명 : my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 리턴하세요.
입/출력 :
console.log(solution("programmers", "p")); // "Programmers"
function solution(my_string, alp) {
return my_string.replaceAll(alp, alp.toUpperCase());
}
function solution(my_string, alp) {
let arr = Array.prototype.slice.call(my_string);
for (let i = 0; i < arr.length; i++) {
if (arr[i] === alp) {
arr[i] = arr[i].toUpperCase();
}
}
return arr.join("");
}
문제설명 : binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 리턴하세요.
입/출력 :
console.log(solution("43 + 12")); // 55
const add = (a, b) => Number(a) + Number(b);
const minus = (a, b) => Number(a) - Number(b);
const multi = (a, b) => Number(a) * Number(b);
function solution(binomial) {
const [a, op, b] = binomial.split(" ");
let sign = ["+", '-', '*'];
const f = (op === sign[0]) ? add : (op === sign[1]) ? minus : multi;
return f(a, b);
}
const ops = {
"+": (a, b) => a + b,
"-": (a, b) => a - b,
"*": (a, b) => a * b,
}
function solution(binomial) {
const [a, op, b] = binomial.split(" ");
return ops[op](Number(a), Number(b));
}
문제설명 : 파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 리턴하세요.
입/출력 :
console.log(solution("abcdevwxyz")); // "lllllvwxyz"
function solution(myString) {
const beforeL = "abcedfghijk";
let answer = [];
for (let i = 0; i < myString.length; i++) {
if (beforeL.includes(myString[i])) {
answer.push("l");
} else {
answer.push(myString[i]);
}
}
return answer.join("");
}
function solution(myString) {
// myString을 배열로 만든 후 각 원소를 돌면서 원소보다 l이 크다면, 즉 l보다 이전의 알파벳이라면 l로 바꾼다.
let answer = [...myString].map(el => el < 'l' ? 'l' : el).join("");
return answer;
}
문제설명 : myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 리턴하세요.
입/출력 :
console.log(solution("oxooxoxxox")); // [1, 2, 1, 0, 1, 0]
function solution(myString) {
let leng = 0;
let answer = [];
let str = [...myString];
for(let i = 0; i < str.length; i++) {
if (str[i] !== "x") {
leng++;
} else {
answer.push(leng);
leng = 0;
}
}
// edge case) 1.leng가 남아있을 경우 2. 마지막 원소가 'x'일 경우
if (leng > 0) {
answer.push(leng);
} else if ((str[str.length-1]) === "x"){
answer.push(0);
}
return answer;
}
function solution(myString) {
let answer = myString.split('x').map(el => el.length);
return answer;
}
잘 읽었습니다. 좋은 정보 감사드립니다.