프로그래머스 : JavaScript 알고리즘 100일 챌린지 13일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩테스트 입문 Day13
1. 컨트롤 제트 : 숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
function solution(s) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
s | result |
"1 2 Z 3" | 4 |
"10 20 30 40" | 100 |
"10 Z 20 Z 1" | 1 |
"10 Z 20 Z" | 0 |
"-1 -2 -3 Z" | -3 |
답 확인하기
function solution(s) {
let sum = 0;
const splitArray = s.split(' ');
for(let i=0; i<splitArray.length; i++){
const item = splitArray[i];
if(item !== 'Z'){
sum += Number(item);
} else {
sum -= Number(splitArray[i-1]);
}
}
return sum;
}
// 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));
// }
// // numbers는 더해야할 모든 숫자의 배열
// let sum =0;
// for(let i=0; i<numbers.length; i++){
// sum += numbers[i];
// }
// return sum;
// }
해설 확인하기
코드는 주어진 문자열 s를 분석하여 계산된 결과를 반환하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 0을 가지는 sum 변수를 선언합니다. 이 변수는 계산된 결과의 합을 저장할 변수입니다.
문자열 s를 공백을 기준으로 분리하여 배열 splitArray에 저장합니다.
반복문을 통해 splitArray의 각 요소를 순회합니다.
현재 요소 splitArray[i]를 item 변수에 저장합니다.
만약 item이 'Z'가 아니라면, item을 숫자로 변환한 후 sum에 더합니다.
그렇지 않고 item이 'Z'라면, 바로 이전 요소인 splitArray[i-1]을 숫자로 변환한 후 sum에서 뺍니다. 이는 'Z'가 나온 시점에서 바로 이전 숫자를 빼는 연산을 수행하는 것입니다.
반복문이 종료되고 나면, sum 변수에는 계산된 결과의 합이 저장되어 있습니다.
sum 값을 반환합니다.
즉, solution 함수는 주어진 문자열 s를 분석하여 'Z'가 나오기 전까지의 숫자들의 합에서 'Z'가 나온 시점에서 바로 이전 숫자를 뺀 결과를 반환합니다. 문자열에서 숫자는 공백을 기준으로 분리되며, 'Z'는 특정 연산을 나타냅니다.
2. 배열 원소의 길이 : 문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.
function solution(strlist) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
strlist | result |
["We", "are", "the", "world!"] | [2, 3, 3, 6] |
["I", "Love", "Programmers."] | [1, 4, 12] |
답 확인하기
function solution(strlist) {
var answer = [];
for(let i=0; i<strlist.length; i++){
const item = strlist[i];
answer.push(item.length);
}
return answer;
}
해설 확인하기
코드는 주어진 문자열 배열 strlist의 각 문자열의 길이를 추출하여 배열로 반환하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 빈 배열 answer를 선언합니다. 이 배열은 문자열 길이를 저장할 배열입니다.
반복문을 통해 strlist의 각 문자열을 순회합니다.
현재 문자열 strlist[i]의 길이를 item.length를 통해 추출합니다.
answer 배열에 추출한 길이를 추가합니다. 반복문이 종료되고 나면, answer 배열에는 각 문자열의 길이가 저장되어 있습니다.
answer 배열을 반환합니다.
즉, solution 함수는 주어진 문자열 배열 strlist의 각 문자열의 길이를 추출하여 배열로 반환합니다. 반환된 배열에는 각 문자열의 길이들이 저장되어 있습니다.
3. 중복된 문자 제거 : 문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
function solution(my_string) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
my_string | result |
"people" | "peol" |
"We are the world" | "We artheold" |
답 확인하기
function solution(my_string) {
var 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;
}
해설 확인하기
코드는 중복된 문자를 제거한 후 남은 문자들을 순서대로 결합하여 반환하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 빈 문자열 result를 선언합니다. 이 변수는 중복된 문자를 제거한 결과를 저장할 문자열입니다.
반복문을 통해 my_string의 각 문자를 순회합니다.
현재 문자 my_string[i]을 item 변수에 저장합니다.
existed 변수를 초기값 false로 설정합니다. 이 변수는 현재 문자가 이미 result에 존재하는지를 나타내는 불리언 값입니다.
중첩된 반복문을 통해 result의 각 문자를 순회합니다.
만약 현재 문자 item이 result[j]와 일치한다면, existed를 true로 설정하고 반복문을 종료합니다. 이는 이미 result에 중복된 문자가 존재한다는 것을 의미합니다.
만약 existed가 false라면, 즉 현재 문자 item이 result에 존재하지 않는다면, result에 현재 문자 item을 추가합니다.
반복문이 종료되고 나면, result 변수에는 중복된 문자가 제거된 문자열이 저장되어 있습니다.
result를 반환합니다.
즉, solution 함수는 주어진 문자열 my_string에서 중복된 문자를 제거한 후 남은 문자들을 순서대로 결합하여 반환합니다. 반환된 문자열에는 중복이 제거된 문자들이 저장되어 있습니다.
4. 삼각형의 완성조건(1) : 선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다. 삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.
- 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
function solution(sides) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
sides | result |
[1, 2, 3] | 2 |
[3, 6, 2] | 2 |
[199, 72, 222] | 1 |
답 확인하기
function solution(sides) {
var answer = 0;
let max = -1;
let maxIndex = -1;
for(let i=0; i<sides.length; i++){
const item = sides[i];
if(max < item){
max = item;
maxIndex = i;
}
}
let sum = 0;
for(let i=0; i<sides.length; i++){
if(i !== maxIndex){
sum += sides[i];
}
}
return max < sum ? 1 : 2;
}
해설 확인하기
코드는 주어진 배열 sides가 삼각형을 만들 수 있는지 판별하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 변수 answer를 0으로 설정합니다. 이 변수는 삼각형을 만들 수 있는 경우에는 1, 만들 수 없는 경우에는 2를 나타냅니다.
max 변수를 -1로 설정합니다. 이 변수는 sides 배열의 가장 큰 값으로 초기화됩니다.
maxIndex 변수를 -1로 설정합니다. 이 변수는 max의 인덱스를 나타냅니다.
반복문을 통해 sides 배열을 순회합니다.
현재 요소 sides[i]를 item 변수에 저장합니다.
만약 max보다 item이 크다면, max와 maxIndex를 갱신합니다. max는 현재 가장 큰 값으로, maxIndex는 해당 값의 인덱스로 설정됩니다.
sum 변수를 0으로 설정합니다. 이 변수는 sides 배열의 가장 큰 값을 제외한 나머지 값들의 합을 나타냅니다.
반복문을 통해 sides 배열을 순회합니다.
현재 인덱스 i가 maxIndex와 같지 않은 경우에만 실행합니다. 즉, 가장 큰 값을 제외한 나머지 요소들에 대해서만 처리합니다.
sum에 현재 요소 sides[i]를 더합니다.
반복문이 종료되고 나면, sum에는 가장 큰 값을 제외한 나머지 요소들의 합이 저장되어 있습니다.
max가 sum보다 작다면, answer를 1로 설정합니다. 즉, 가장 큰 값이 나머지 값들의 합보다 작으면 삼각형을 만들 수 있습니다. 그렇지 않은 경우에는 answer를 2로 설정합니다.
answer를 반환합니다.
즉, solution 함수는 주어진 배열 sides를 이용하여 삼각형을 만들 수 있는지 판별합니다. 반환값은 삼각형을 만들 수 있는 경우에는 1, 만들 수 없는 경우에는 2입니다.