본문 바로가기

Language/Javascript (ES6+)

해커랭크 10 Days of Javascript (Day0 ~ Day4)

✔ Day 0: Hello, World!

input으로 문자열을 받았을 때, console에 출력.

function greeting(parameterVariable) {
    console.log('Hello, World!');

    console.log(parameterVariable)
}

 

✔ Day 0: Data Types

input으로 데이터 타입이 string인 secondInteger, secondDecimal, secondString을 받았을 때, first변수들에 맞게 형변환을 하고 sum한 결과를 출력.

function performOperation(secondInteger, secondDecimal, secondString) {
    const firstInteger = 4;
    const firstDecimal = 4.0;
    const firstString = 'HackerRank ';
    
    const sumInteger = firstInteger + parseInt(secondInteger);
    console.log(sumInteger);
    
    const sumDecimal = firstDecimal + parseFloat(secondDecimal);
    console.log(sumDecimal);
    
    const sumString = firstString + secondString;
    console.log(sumString);
}

 

✔ Day 1: Arithmetic Operators

input으로 사각형의 length와 width를 받았을 때, 사각형의 면적과 둘레를 리턴.

function getArea(length, width) {
    let area;
    // Write your code here
    area = length * width;
    return area;
}

function getPerimeter(length, width) {
    let perimeter;
    // Write your code here
    perimeter = 2 * (length + width);
    return perimeter;
}

 

✔ Day 1: Functions

함수를 사용해서 팩토리얼한 결과를 리턴.

function factorial(n) {
    if (n < 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

 

//es6 version
const factorial = (n) => (n - 1) > 0 ? n * factorial(n - 1) : 1;

 

✔ Day 1: Let and Const

constant variable인 PI를 정의하고 r을 입력받아서 원의 넓이와 둘레를 출력.

function main() {
    const PI = Math.PI;
    
    function getArea(r) {
        let area;
        area = PI * Math.pow(r, 2);
        return area;
    }
    function getPerimeter(r) {
        let perimeter;
        perimeter = 2 * PI * r;
        return perimeter;
    }
    
    const r = readLine();
    
    // Print the area of the circle:
    console.log(getArea(r))
    // Print the perimeter of the circle:
    console.log(getPerimeter(r))
 }

 

//es6 version
function main() {
    const PI = Math.PI;
    
    const getArea = (r) => PI * Math.pow(r, 2)
    const getPerimeter = (r) => 2 * PI * r;
    
    const r = readLine();
    
    // Print the area of the circle:
    console.log(getArea(r))
    // Print the perimeter of the circle:
    console.log(getPerimeter(r))
 }

 

✔ Day 2: Conditional Statements: If-Else

score 점수에 따라서 if-else문을 사용하여 성적 리턴.

function getGrade(score) {
    let grade;
    // Write your code here
    if (25 < score && score <= 30) {
        grade = "A";
    } else if (20 < score && score <= 25) {
        grade = "B";
    } else if (15 < score && score <= 20) {
        grade = "C";
    } else if (10 < score && score <= 15) {
        grade = "D";
    } else if (5 < score && score <= 10) {
        grade = "E";
    } else {
        grade = "F";
    }

    return grade;
}

 

//es6 version
function getGrade(score) {

    return (0 <= score && score <= 5) ? "F"
        : (5 <= score && score <= 10) ? "E"
        : (10 <= score && score <= 15) ? "D"
        : (15 <= score && score <= 20) ? "C"
        : (20 <= score && score <= 25) ? "B"
        : (25 <= score && score <= 30) ? "A" : ""
}

 

✔ Day 2: Conditional Statements: Switch

input으로 문자열 s가 주어지면 첫번째 문자에 따라 알파벳 리턴.

function getLetter(s) {
    let letter;
    // Write your code here
    switch (s.charAt(0)) {
        case("a"):
        case("e"):
        case("i"):
        case("o"):
        case("u"):
            letter = "A";
            break;
        case("b"):
        case("c"):
        case("d"):
        case("f"):
        case("g"):
            letter = "B";
            break;
        case("h"):
        case("j"):
        case("k"):
        case("l"):
        case("m"):
            letter = "C";
            break;
        default:
            letter = "D";
            break;
    }
    return letter;
}

 

✔ Day 2: Loops

input으로 문자열 s가 주어지면 각 줄에 모음을 출력한뒤 자음을 출력.

function vowelsAndConsonants(s) {
    const v = ["a", "e", "i", "o", "u"];
    let vowel = [];
    let consonant = [];

    for (let i = 0; i < s.length; i++) {
        if (v.indexOf(s[i]) > -1) {	//v에 s[i]가 없다면 -1 반환
            vowel.push(s[i]);
        }
        else {
            consonant.push(s[i]);
        }
    }

    for (let i = 0; i < vowel.length; i++) {
        console.log(vowel[i]);
    }
    for (let i = 0; i < consonant.length; i++) {
        console.log(consonant[i]);
    }
}

 

✔ Day 3: Arrays

input으로 배열 nums가 주어지면 배열에서 두번째로 큰 숫자를 리턴.

function getSecondLargest(nums) {
    // Complete the function
    let firstMax = Math.max.apply(null, nums);
    let secondMax;
    let removeNum = [];
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== firstMax) {
            removeNum.push(nums[i]);
        }
    }
    secondMax = Math.max.apply(null, removeNum);
    return secondMax;
}

 

//es6 version
function getSecondLargest(nums) {
    // Complete the function
    let firstMax = Math.max.apply(null, nums);
    let secondMax;
    
    let removeNum = nums.filter((item) => item !== firstMax);
    
    secondMax = Math.max.apply(null, removeNum);
    return secondMax;
}

 

//prototype version
Array.prototype.secondMax = function () {
    const firstMax = Math.max.apply(null, this);
    const removeNum = this.filter((item) => item !== firstMax);
    return Math.max.apply(null, removeNum);
};
function getSecondLargest(nums) {
    // Complete the function
    return nums.secondMax();  
}

 

✔ Day 3: Try, Catch, and Finally

input으로 매개변수 s가 주어지는데, s가 문자열이라면 거꾸로 출력한다. s가 문자열이 아니라면 예외메세지를 출력하고 s를 그대로 출력한다.

function reverseString(s) {
    try {	//에러가 나면 코드의 흐름이 catch로 넘어간다.
        let inputArr = s.split("");
        inputArr.reverse();
        const reverseArr = inputArr.join("");
        console.log(reverseArr);
    } catch (exception) {
        console.log(exception.message);
        console.log(s);
    }
}

 

✔ Day 3: Throw

input으로 숫자 a가 주어지면 a의 값에 따라 결과를 리턴한다.

a가 양수라면 YES, a가 0이라면 에러메세지 Zero Error, a가 음수라면 에러메세지 Negative Error 리턴.

function isPositive(a) {
    if (a > 0) {
        return "YES";
    } else if (a === 0) {
        throw new Error("Zero Error");
    } else {
        throw new Error("Negative Error");
    }
}
//에러의 종류를 구분할 때 throw사용

 

✔ Day 4: Create a Rectangle Object

객체를 생성하기 위한 함수를 작성한다. 함수는 가로, 세로, 둘레, 넓이의 속성을 가진다.

function Rectangle(a, b) {
    this.length = a;
    this.width = b;
    this.perimeter = 2 * (a + b);
    this.area = a * b;
}

 

//es6 version
class Rectangle {
    constructor(a, b) {
        this.length = a;
        this.width = b;
        this.perimeter = 2 * (a + b);
        this.area = a * b;
    }
}

 

✔ Day 4: Count Objects

input으로 여러개의 객체를 가진 배열이 주어지면 객체의 x속성과 y속성이 같은 객체의 개수를 리턴.

function getCount(objects) {
    let result = [];
    for (let i in objects) {
        if (objects[i].x === objects[i].y){
            result.push(i);
        }
    }
    return result.length;
}

 

//es6 version
const getCount = (objects) => {
    let result = objects.filter((item) => item.x === item.y);
    return result.length;
}

 

✔ Day 4: Classes

다각형의 각 둘레 길이를 나타내는 배열, 둘레의 총 길이를 리턴하는 메소드 이 두개의 속성을 가진 class를 만든다.

function Polygon(arg) {
    this.arg = arg;
    this.perimeter = function () {
        let perimeter = 0;
        for (let i = 0; i < this.arg.length; i++) {
            perimeter += this.arg[i];
        }
        return perimeter;
    }
}

 

//es6 version
class Polygon {
    constructor(args) {
        this.args = args
    }
    perimeter() {
        let perimeter = 0;
        for (let i = 0; i < this.args.length; i++) {
            perimeter += this.args[i];
        }
        return perimeter;
    };
}

const rectangle = new Polygon([10, 20, 10, 20]);  //60
const square = new Polygon([10, 10, 10, 10]);     //40
const pentagon = new Polygon([10, 20, 30, 40, 43]);   //143

 

 

'Language > Javascript (ES6+)' 카테고리의 다른 글

[ES6] 기본 개념 정리  (0) 2020.03.08