코딩 공부/코딩테스트

자바스크립트 코딩테스트 입문 (13)

천서리 2023. 5. 28. 14:51
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 입문 Day 13 문자열, 배열, 사칙연산, 수학, 조건문

출처 : https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


컨트롤 제트

문제

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

 

 

제한사항

  • 1 ≤ s의 길이 ≤ 200
  • -1,000 < s의 원소 중 숫자 < 1,000
  • s는 숫자, "Z", 공백으로 이루어져 있습니다.
  • s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
  • 연속된 공백은 주어지지 않습니다.
  • 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
  • s는 "Z"로 시작하지 않습니다.
  • s의 시작과 끝에는 공백이 없습니다.
  • "Z"가 연속해서 나오는 경우는 없습니다.

 

입출력 예

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

 

입출력 예 설명

 

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 10 + 20 + 30 + 40 = 100을 return 합니다.

입출력 예 #3

  • "10 Z 20 Z 1"에서 10 다음 Z, 20 다음 Z로 10, 20이 지워지고 1만 더하여 1을 return 합니다.

 

solution.js

function solution(s) {
    var elements = s.split(" ");
    var answer = 0;

    for (var i = 0; i < elements.length; i++) {
        if (elements[i] === "Z") {
            answer -= parseInt(elements[i - 1]);
        } else {
            answer += parseInt(elements[i]);
        }
    }

    return answer;
}
  1. var elements = s.split(" ");: 주어진 문자열 s를 split 함수를 사용하여 공백을 기준으로 분리하고, 각각의 요소를 배열 elements에 저장합니다.
  2. var answer = 0;: 결과 값을 저장할 변수 answer를 초기화합니다. 초기값은 0입니다.
  3. for (var i = 0; i < elements.length; i++) {: 배열 elements의 각 요소를 순회하기 위한 반복문을 시작합니다.
  4. if (elements[i] === "Z") {: 현재 원소 elements[i]가 "Z"인지 확인합니다. 만약 "Z"라면, 이전에 더한 숫자를 빼주어야 합니다.
  5. answer -= parseInt(elements[i - 1]);: parseInt 함수를 사용하여 elements[i - 1]을 정수로 변환한 후, answer에서 빼줍니다. 즉, 이전에 더한 숫자를 빼는 것입니다.
  6. else {: 현재 원소 elements[i]가 "Z"가 아닌 숫자인 경우입니다. 해당 숫자를 더해줘야 합니다.
  7. answer += parseInt(elements[i]);: parseInt 함수를 사용하여 elements[i]을 정수로 변환한 후, answer에 더해줍니다.
  8. return answer;: 계산이 끝난 결과값 answer를 반환합니다.

배열 원소의 길이

문제

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 1 ≤ strlist 원소의 길이 ≤ 100
  • strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.

 

입출력 예

strlist result
["We", "are", "the", "world!"] [2, 3, 3, 6]
["I", "Love", "Programmers."] [1, 4, 12]

 

입출력 예 설명

 

입출력 예 #1

  • ["We", "are", "the", "world!"]의 각 원소의 길이인 [2, 3, 3, 6]을 return합니다.

입출력 예 #2

  • ["I", "Love", "Programmers."]의 각 원소의 길이인 [1, 4, 12]을 return합니다.

 

solution.js

function solution(strlist) {
    var answer = [];

    for (var i = 0; i < strlist.length; i++) {
        answer.push(strlist[i].length);
    }

    return answer;
}
  1. var answer = [];: 결과 값을 저장할 빈 배열 answer를 생성합니다.
  2. for (var i = 0; i < strlist.length; i++) {: 배열 strlist의 각 요소를 순회하기 위한 반복문을 시작합니다.
  3. answer.push(strlist[i].length);: strlist[i]의 길이를 구하여 answer 배열에 추가합니다. strlist[i].length는 strlist 배열의 i번째 요소의 길이를 나타냅니다.
  4. return answer;: 계산이 끝난 결과값 answer를 반환합니다. 이는 strlist 배열의 각 요소의 길이로 이루어진 새로운 배열입니다.

중복된 문자 제거

문제

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • 1 ≤ my_string ≤ 110
  • my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
  • 대문자와 소문자를 구분합니다.
  • 공백(" ")도 하나의 문자로 구분합니다.
  • 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.

 

입출력 예

strlist result
"people" "peol"
"We are the world" "We arthwold"

 

입출력 예 설명

 

입출력 예 #1

  • "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.

입출력 예 #2

  • "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.

 

solution.js

function solution(my_string) {
    var answer = '';

    for (var i = 0; i < my_string.length; i++) {
        var currentChar = my_string[i];

        if (answer.indexOf(currentChar) === -1) {
            answer += currentChar;
        }
    }

    return answer;
}
  1. var answer = '';: 결과 값을 저장할 빈 문자열 answer를 생성합니다.
  2. for (var i = 0; i < my_string.length; i++) {: 문자열 my_string의 각 문자를 순회하기 위한 반복문을 시작합니다.
  3. var currentChar = my_string[i];: 현재 인덱스 i의 문자를 currentChar 변수에 저장합니다.
  4. if (answer.indexOf(currentChar) === -1) {: answer 문자열에서 currentChar의 인덱스를 찾습니다. indexOf 함수는 문자열 내에서 currentChar가 처음으로 등장하는 인덱스를 반환합니다. 반환된 인덱스가 -1인 경우, currentChar가 answer 문자열에 없는 것을 의미합니다.
  5. answer += currentChar;: currentChar이 answer 문자열에 없는 경우, answer에 currentChar를 추가합니다.
  6. return answer;: 중복되지 않는 문자들로 이루어진 결과 문자열 answer를 반환합니다.

삼각형의 완성조건 (1)

문제

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

 

 

제한사항

  • sides의 원소는 자연수입니다.
  • sides의 길이는 3입니다.
  • 1 ≤ sides의 원소 ≤ 1,000

 

입출력 예

sides result
[1, 2, 3] 2
[3, 6, 2] 2
[199, 72, 222] 1

 

입출력 예 설명

 

입출력 예 #1

  • 가장 큰 변인 3이 나머지 두 변의 합 3과 같으므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

입출력 예 #2

  • 가장 큰 변인 6이 나머지 두 변의 합 5보다 크므로 삼각형을 완성할 수 없습니다. 따라서 2를 return합니다.

입출력 예 #3

  • 가장 큰 변인 222가 나머지 두 변의 합 271보다 작으므로 삼각형을 완성할 수 있습니다. 따라서 1을 return합니다.

 

solution.js

function solution(sides) {
    sides.sort(function(a, b) {
        return b - a;
    });

    var a = sides[0];
    var b = sides[1];
    var c = sides[2];

    if (a >= b + c) {
        return 2;
    } else {
        return 1;
    }
}
  1. sides.sort(function(a, b) { return b - a; });: sides 배열을 내림차순으로 정렬합니다. 이를 통해 가장 긴 변이 배열의 첫 번째 요소에 위치하게 됩니다.
  2. var a = sides[0];: 배열 sides의 첫 번째 요소를 변수 a에 저장합니다. 이는 가장 긴 변의 길이입니다.
  3. var b = sides[1];: 배열 sides의 두 번째 요소를 변수 b에 저장합니다. 이는 중간 길이의 변입니다.
  4. var c = sides[2];: 배열 sides의 세 번째 요소를 변수 c에 저장합니다. 이는 가장 짧은 변의 길이입니다.
  5. if (a >= b + c) { return 2; }: 만약 가장 긴 변 a의 길이가 나머지 두 변 b와 c의 길이의 합보다 크거나 같다면, 삼각형을 만들 수 없습니다. 이 경우 2를 반환합니다.
  6. else { return 1; }: 그렇지 않은 경우, 가장 긴 변 a의 길이가 나머지 두 변 b와 c의 길이의 합보다 작으므로 삼각형을 만들 수 있습니다. 이 경우 1을 반환합니다.

이렇게 함수는 주어진 세 변의 길이로 삼각형을 만들 수 있는지 판별하여 그 결과를 반환합니다. 반환값이 1인 경우 삼각형을 만들 수 있고, 반환값이 2인 경우 삼각형을 만들 수 없습니다.

반응형
Adventure Time - BMO