[JavaScript] 암묵적 타입 변환
·
JavaScript
암묵적 타입 변환 ( Implicit coercion ) 간단하게 말하면 예상치 못한 타입을 받았을 때 예상 가능한 타입으로 바꿔준다고 생각하면 된다. 사용자는 숫자 값을 넘겨야 하는 곳에 문자열을 넣을 수 있고, 문자열을 넣어야 하는 곳에 객체를 넣을 수 있다. 이런 일이 발생했을 때 자바스크립트 엔진을 사용자가 잘못 넣은 타입을 올바른 타입으로 변환하려는 시도를 한다. 자바스크립트의 주요한 기능 중 하나이지만 가장 피해야 할 기능이다. 3 * "3" // 9 1 + "2 + 1 // 121 true + true // 2 10 - true // 9 const foo = { valueOf: () => 2 } 3 + foo // 5 4 * foo // 8 const bar = { toString: () =..
[JavaScript] 자바스크립트의 원시 타입
·
JavaScript
기초 자바스크립트에는 6가지 원시 데이터 타입이 있다. 원시 데이터 타입이란 자바스크립트에서 객체가 아닌 것을 말하면 값 그대로 저장된 것을 말한다. Booleans : true or false null undefined number string symbol 6가지 원시 타입에 ECMAScript 표준은 Object를 정의했다. Object는 키-값 저장소이다. const object = { key: "value" } 즉, 원시 타입( Primitive Type )이 아닌 것은 Object이다. 여기에는 함수와 배열도 포함이다. // Primitive Types true instanseof Object; // false => boolean numm instanseof Object; // false => ..
[알고리즘] 프린터
·
알고리즘
문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 ..
[알고리즘] 튜플
·
알고리즘
문제 설명 셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다. (a1, a2, a3, ..., an) 튜플은 다음과 같은 성질을 가지고 있습니다. 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2) 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2) 튜플의 원소 개수는 유한합니다. 원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'..
[알고리즘] N으로 표현
·
알고리즘
문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 입출력 예 N number return 5 1..
[JavaScript] Destructuring 문법
·
JavaScript
자바스크립트에서 array, object 안에 있는 데이터를 빼서 변수로 만들고 싶을 때 쓰는 문법이 있다. let person = { name : "abc", age : 13 } let name = person.name; let age = person.age; 그냥 객체명.속성 방식으로 데이터를 뺄 수 있지만, 간단하게 뺄 수 있도록 도와주는 것이 Desctructuring 문법이다. let person = { name : "abc", age: 13 } let { name, age } = person; 간단하게 객체의 속성을 빼낼 수 있는 문법이다. 가능하면 변수의 명칭을 객체의 속성명으로 작명하는 게 가독성이 좋지만, 반드시 같을 필요는 없으며, array destructuring 할 때는 변수 명칭..
[JavaScript] ... 문법
·
JavaScript
자바스크립트에서 ... 을 사용하는 문법이 2개가 있다. 하나는 rest 파라미터, 다른 하나는 spread operator 가 있다. rest 파라미터 함수에 파라미터를 넘겨줄 때, 몇 개의 파라미터가 들어갈지 미리 정의할 수 없는 경우가 있다. 그럴 때 사용하는 것이 rest 파라미터이다. function addAll(...num) { let sum = 0; num.forEach(element => { sum+= element; }) return sum; } addAll(1,2,3,4,5); addAll(1,2,3,4,5,6,7,8,9,10); 함수 파라미터의 명칭 앞에 ... 을 붙여주면 파라미터를 여러 개를 받는다는 뜻이다. 특징으로는 일반 파라미터 뒤에만 올 수 있다. function addAl..
[알고리즘] 수식 최대화
·
알고리즘
문제 설명 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 같은 방식으로 결정하려고 합니다. 해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+, -, *) 만으로 이루어진 연산 수식이 전달되며, 참가자의 미션은 전달받은 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다. 단, 연산자의 우선순위를 새로 정의할 때, 같은 순위의 연산자는 없어야 합니다. 즉, + > - > * 또는 - > * > + 등과 같이 연산자 우선순위를 정의할 수 있으나 +,* > - 또는 * > +,-처럼 2개 이상의 연산자..