기본 문제
자바 스크립트의 문법에 익숙해질 수 있는 기본 문법이다.
세 수 중 최솟값
자연수 A, B, C를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램
- 입력예제
6 5 11
- 출력예제
5
- 답안
//동일 디렉토리의 input.txt로 답안을 입력받아 문자열 리스트로 반환합니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split(" ");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer;
const a = parseInt(input[0]);
const b = parseInt(input[1]);
const c = parseInt(input[2]);
//세 개의 요소 중 두 개씩 비교한다. 더 작은 수를 answer에 저장한다.
if (a < b) answer = a;
else answer = b;
if (c < answer) answer = c;
console.log(answer)
}
solution(input);
- 문제 해결 아이디어
if 함수를 이용해 2번 비교한다.
a와 b 중 작은 수를 answer에 저장한다.
이후 answer와 c중 작은 수를 answer에 저장한 후 출력한다.
- 자바스크립트 문법 tip
if (a < b) answer = a;
:
if 블록 안에 들어오는 코드가 한 줄 이라면 중괄호{brace}를 생략할 수 있다.
if (a < b) answer = a;
else answer = b;
const [a, b, ...rest] = array
:
인풋값을 아래와 같이 구조분해 할당으로 넘겨받을 수 있다.
const [a, b, c] = input.map(element => parseInt(element))
삼각형 판별하기
A, B, C 세 개의 막대가 주어질 때, 삼각형을 만들 수 있으면 "YES", 만들 수 없으면 "NO"
- 입력예제
6 7 11
- 출력예제
YES
- 답안
//동일 디렉토리의 input.txt로 답안을 입력받아 문자열 리스트로 반환합니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().split(" ");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer;
const a = parseInt(input[0]);
const b = parseInt(input[1]);
const c = parseInt(input[2]);
let max;
const total = a + b + c;
/
if (a > b) max = a;
else max = b;
if (max > c) max = c;
if (max > total - max) answer = "NO";
else answer = "YES";
console.log(answer);
}
solution(input);
- 문제 해결 아이디어
가장 큰 값과 나머지 두 값을 분류하는 것이 중요한 문제이다. 본 코드에서는 세 값의 합을 구한 후, 가장 큰 값을 더하고 빼는 방식으로 코드를 구성하였다.
삼각형이 만들어지기 위해서는 가장 큰 변이 나머지 두 변의 합보다 길어야 한다.
c가 가장 큰 변이라고 하면, c > a + b 이다. 이는 c > (a + b + c) - c 와 같다.
위의 코드에서는 a + b + c를 total로. c를 max로 할당하게 된다.
10부제
자동차 10부제를 시행한다.
날짜의 일의 자리 숫자가 주어지고 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때
위반하는 자동차의 대수를 출력하는 프로그램을 작성하세요.
- 입력예제
3
25 23 11 47 53 17 33
- 출력예제
3
- 답안
//input의 첫줄이 하나의 정수이고,
//이후 한줄에 걸쳐 공백으로 입력값을 받을 때의 예시입니다.
//https://overcome-the-limits.tistory.com/170?category=922246
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const input1 = parseInt(input[0]);
const input2 = input[1].split(" ").map(Number);
//solution함수 안에 답안을 작성하세요.
function solution(input1, input2) {
let answer = 0;
let day = input1;
let nums = input2;
for (let num of nums) {
if (num % 10 === day) answer++;
}
console.log(answer);
}
solution(input1, input2);
- 문제 해결 아이디어
1의 자리 수를 구하기 위해서는 10으로 나눈 나머지를 사용할 수 있다.
- 자바스크립트 문법 팁
Array.prototype.map(Number)
: const input2 = input[1].split(" ").map(Number);
해당 구문에서 map() 메서드의 인수로 'Number'를 넘겼다. 이는 map((str, ind, arr) => Number(str, ind, arr)
와 동일하게 작동하며, Number함수는 하나의 인자만 받으므로 str이 숫자로 변경된다.
연필 개수
학생 1인당 연필 1자루를 나눠줄 때, 학생수 N명이 입력되면 필요한 연필의 다스(12자루) 수는?
- 입력예제
25
- 출력예제
3
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer;
let students = parseInt(input);
answer = Math.ceil(students / 12);
console.log(answer);
}
solution(input);
- 문제 해결 아이디어
12로 나누어 떨어지면 해당 갯수만큼의 다스가 필요하다. 나누어 떨어지지 않으면 (즉 remainder가 0보다 크면) quotient + 1 만큼의 다수가 필요하다.
- 자바스크립트 문법 팁
Math.ceil()
: Math 내장객체를 이용해 간단히 풀 수 있다. 나누어 떨어지지 않으면 숫자를 올림한다.
Number.EPSILON
: 숫자를 다룰 때 부동소수점 오류를 해결하기 위해서는 a===b
를 a - b < Number.EPSILON
으로 변경하여 두 숫자의 동일 여부를 판별할 수 있다.
1부터 N까지 합 출력하기
자연수 N이 입력되면 1부터 N까지의 합을 출력
- 입력예제
6
- 출력예제
21
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = 0;
let natNum = parseInt(input);
for (let i = 1; i <= natNum; i++) {
answer += i;
}
console.log(answer);
}
solution(input);
- 풀이 해설
기본적인 누적합 문제이다. answer를 0으로 초기화하지 않으면 undefined나 NaN 오류를 마주할 것이다.
- 자바스크립트 문법 팁
Array.from({ length: mylength }, (_, i) => i)
: 자바스크립트에는 range() 함수가 없다. Array.from(유사배열객체, 요소반환함수)
를 이용하여 위와 같이 인덱스를 값으로 하는 배열을 반환할 수 있다.
최솟값 구하기
7개의 숫자가 주어졌을 때, 가장 작은 수를 출력
- 입력예제
5 3 7 11 2 15 17
- 출력예제
2
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim().split(" ");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = Number.MAX_SAFE_INTEGER;
const arr = input.map(Number);
for (let i = 0; i < arr.length; i++) {
if (arr[i] < answer) answer = arr[i];
}
console.log(answer);
}
solution(input);
- 풀이 해설
Number.MAX_SAFE_INTEGER는 충분히 큰 정수값(2^53 - 1)을 저장한다.
문자 배열을 숫자 배열로 넘겨받기 위해서는 배열명.map(Number) 메서드를 이용한다.
배열의 요소갯수는 배열명.length 프로퍼티를 사용한다.
최솟값을 큰 값으로 지정해두고 배열에 있는 값과 비교하며 업데이트하는 문제이다. answer를 최솟값의 변수로 사용했다.
- 자바스크립트 문법 팁
Array.prototype.reducer((accumulator, currentValue) => {...}, 초기값)
: Array함수의 reducer 메서드는 accumulator를 다음 반복에 넘겨준다. 이를 이용하여 for문을 아래와 같이 변경할 수 있다.
const answer = arr.reduce((min, current) => {
return min < current ? min : current;
}, Number.MAX_SAFE_INTEGER);
홀수
7개의 자연수 중 홀수들의 합과 홀수의 최소값을 출력
- 입력예제
12 77 38 41 53 92 85
- 출력예제
256
41
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs
.readFileSync(filePath)
.toString()
.trim()
.split(" ")
.map(Number);
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let odd_sum = 0;
let odd_min = Number.MAX_SAFE_INTEGER;
const arr = input;
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 1) {
odd_sum += arr[i];
if (arr[i] < odd_min) odd_min = arr[i];
}
}
console.log(odd_sum);
console.log(odd_min);
}
solution(input);
- 풀이 해설
숫자배열로 받으려고 input변수 선언할 때부터 .map(Number) 해버렸다.
두 개의 변수가 존재해야 하는 for { if {if }}} 구조이다.
- 자바스크립트 문법 팁
for...of를 사용해 다음과 같이 풀이할 수 있다.
for (let num of arr) {
if (num % 2 === 1) {
odd_sum += num;
if (num < odd_min) odd_min = num;
}
}
일곱 난쟁이
백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을
기억해 냈다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시
오. 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. 입력된 순서대로 일곱 난쟁이의 키를 출력한다.
- 입력예제
20 7 23 19 10 15 25 8 13
- 출력예제
20 7 23 19 10 8 13
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs
.readFileSync(filePath)
.toString()
.trim()
.split(" ")
.map(Number);
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer;
let arr = input;
let counter = 0;
let total = arr.reduce((a, b) => a + b, 0);
for (dwarf1 of arr) {
for (let i = counter + 1; i < arr.length; i++) {
if (total - (dwarf1 + arr[i]) === 100) {
arr.splice(i, 1);
arr.splice(counter, 1);
}
}
counter++;
}
answer = arr;
console.log(answer);
}
solution(input);
- 풀이 해설
Reducer가 100이 되도록 두 수의 조합을 탐색하여 배열에서 제외하는 문제이다. 배열의 두 수의 조합 문제를 브루트포스로 풀었다.(0.232seconds) 정렬되지 않은 배열에 대해서는 투포인터 등을 사용할 수 없다.
ArrayProto.length는 배열의 요소 수를 반환한다. 본 문제는 항상 9로 고정되어 있어 불필요한 프로퍼티이다.
ArrayProto.reduce(function(인자1, 인자2){}, 초기값)은 인자1을 누적자로 사용하여 함수의 계산 결과를 누적한다. reduce는 환원하는 것을 의미한다.
ArrayProto.splice(시작인덱스, (제거할 인자의 수), (...추가할 인자들의 값))은 인덱스의 중간에 값을 제거하거나 추가할 때 유용하다. splice는 꼬다, 엮다 라는 뜻이다.
위 알고리즘을 for of가 아닌 이중for문으로 표현하면 다음과 같다.
function solution(input) {
let answer = input;
let sum = answer.reduce((a, b) => a + b, 0);
for (let i = 0; i < 8; i++) {
for (let j = i + 1; j < 9; j++) {
if (sum - (answer[i] + answer[j]) == 100) {
answer.splice(j, 1);
answer.splice(i, 1);
}
}
}
console.log(answer);
}
solution(input);
'파이썬 알고리즘 인터뷰' 177페이지에는 키값을 이용한 풀이가 나온다. 이를 자바스크립트에는 indexOf를 이용해 특정 값의 인덱스를 찾을 수 있다. 이를 이용하여 아래와 같이 추가로 풀이하였다. 어째 성능이 더 안좋아졌다. (0.258초)
Arrayproto.indexOf(찾을 값, (탐색을 시작할 인덱스))
function solution(input) {
let answer = input;
let sum = answer.reduce((a, b) => a + b, 0);
let subtotal = sum - 100;
for (let i = 0; i < 8; i++) {
let j = answer.indexOf(subtotal - answer[i], i + 1);
if (j !== -1) {
answer.splice(j, 1);
answer.splice(i, 1);
break; //break를 안넣으면 계속 탐색.
}
}
console.log(answer);
}
A를 #으로
영어단어가 입력되면 단어에 포함된 ‘A'를 모두 ’#‘으로 바꾸어 출력하는
프로그램을 작성하세요.
- 입력예제
BANANA
- 출력예제
B#N#N#
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = "";
for (let a of input) {
if (a === "A") answer += "#";
else answer += a;
}
console.log(answer);
}
solution(input);
- 풀이 해설
문자열도 iterable한 객체이다. 문자열을 입력받고 배열처럼 for...of를 사용할 수 있다.
문자 찾기
한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개
존재하는지 알아내는 프로그램을 작성하세요.
- 입력예제
COMPUTERPROGRAMMING
R
- 출력예제
3
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = 0;
let s = input[1];
let str = input[0];
for (i of str) {
if (i === s) answer++;
}
console.log(answer);
}
solution(input);
- 풀이 해설
마찬가지로 문자열의 배열처럼 사용하여 일치여부를 카운터로 넘기는 알고리즘이다.
대문자 찾기
한 개의 문자열을 입력받아 해당 문자열에 알파벳 대문자가 몇 개 있는지 알아내는 프로그램
을 작성하세요.
- 입력예제
KoreaTimeGood
- 출력예제
3
- 답안
StringProto.charCodeAt(인덱스)을 이용한 풀이
//인풋을 입력받습니다.
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : __dirname + '/input.txt';
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer=0;
for(let i=0; i<input.length; i++;){
if(input.charCodeAt(i) >=65 && input.charCodeAt(i) <= 90) answer++;
}
console.log(answer);
}
solution(input);
StringProto.toUpperCase()를 이용한 풀이
function solution(input) {
let answer = 0;
for (let s of input) {
if (s === s.toUpperCase()) answer++;
}
console.log(answer);
}
- 풀이 해설
ASCII(미국 정보교환 표준부호)는 총 128개의 부호가 있다. 대문자 A는 65, 대문자Z는 90, 소문자 a는 97, 소문자 z는 122로 할당되어있다.
StringProto.toUpperCase(), StringProto.toLowerCase() : 모든 문자를 대문자 혹은 소문자로 반환한다.
한편 파이썬과는 달리 자바스크립트에서 부등호 연산자를 사용할 때에는 (i >= 1 && i<=10)과 같이 나누어 표현해야 한다.
- 자바스크립트 문법 팁
StringProto.charCodeAt(인덱스)
: 문자열의 인덱스에 있는 문자의 ASCII코드번호를 반환한다.
대문자로 통일
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자로 모두 통일하여 문자열을 출력
- 입력예제
ItisTimeToStudy
- 출력예제
ITISTIMETOSTUDY
- 답안
answer = input.toUpperCase();
- 풀이 해설
다음 문제나 풉시다
- 자바스트립트 문법 팁
String.prototype.toUpperCase();
대소문자 변환
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로
변환하여 출력하는 프로그램을 작성하세요.
- 입력예제
StuDY
- 출력예제
sTUdy
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = "";
for (s of input) {
s === s.toUpperCase()
? (answer += s.toLowerCase())
: (answer += s.toUpperCase());
}
console.log(answer);
}
solution(input);
- 풀이 해설
특정 문자를 대문자로 바꿔서 해당 문자와 대문자로 변환된 문자가 같으면 기존 문자도 대문자였음.
가장 긴 문자열
첫 줄에 문자열갯수 자연수 N이 주어진다.(3<=N<=30)
두 번째 줄부터 N개의 문자열이 주어진다. 문자열의 길이는 100을 넘지 않습니다.
각 문자열의 길이는 서로 다릅니다.
- 입력예제
5
teacher
time
student
beautiful
good
- 출력예제
beautiful
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = "",
max = 0;
for (let word of input) {
if (word.length >= max) {
max = word.length;
answer = word;
}
}
console.log(answer);
}
solution(input);
-
해설
s.length; 프로퍼티를 이용하는 문제.가운데 문자 출력
단어의 길이가 짝수일 경우 가운데 2개의 문자를 출력합니다.
- 입력예제
study
- 출력예제
u
- 입력예제
good
- 출력예제
oo
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = "";
let len = input.length;
if (len % 2 === 0) answer = input[len / 2 - 1] + input[len / 2];
else answer = input[(len - 1) / 2];
console.log(answer);
}
solution(input);
- 풀이 해설
중앙값을 구할 때 length가 홀수라면 1을 빼고 2로 나눈다. 이 과정에서 1을 빼는 대신 일단 2로 나눈 후 parseInt나 Math.floor(숫자형)을 사용할 수도 있다. (정수를 넘기지 않는 경우 인덱싱이 불가능해서 undefined가 일어난다.)
문자열을 인덱싱할 때 가장 가운데 숫자를 인덱스하는 방법은
- 문자열이 홀수 일 때: s.length에서 1을 뺀 후 2로 나눈 값으로 인덱스한다.
예시: 123 이라는 문자열이 있다. length = 3이다. (3-1)/2 = 1이다. 123[1]이 가운데 글자가 된다.
- 문자열이 짝수일 때: s.length를 2로 나눈 값과 2로 나눈 후 1을 뺀 값으로 인덱스한다.
예시: 1234 라는 문자열이 있다. length =4이다. 4/2는 2, 1234[1], 1234[2]이 가운데 글자가 된다.
인덱스를 여러값 할 때에는 StringProto.substring(시작, (끝)과 StringProto.substr(시작, 추출할 문자갯수(필수값))으로도 인덱싱할 수 있다. substr(시작, 갯수)는 권장되지 않으르모 substring(시작, 시작+갯수)를 이용하자. 위 풀이에서 글자수가 짝수인 문자열을 아래와 같이 출력할 수 있다.
if (len % 2 === 0) answer = input.substring(len / 2 - 1, len / 2);
if (len % 2 === 0) answer = input.substr(len / 2 - 1, 2);
중복문자제거
제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.
- 입력예제
ksekkset
- 출력예제
kset
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim();
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = "";
for (i = 0; i < input.length; i++) {
if (i === input.indexOf(input[i])) answer += input[i];
}
console.log(answer);
}
solution(input);
- 풀이 해설
StringProto.indexOf(밸류값)은 해당 문자가 무자열에서 최초로 등장하는 인덱스를 반환한다.
for (i = 0; i < input.length; i++) {
console.log(`${input[i]} : ${input.indexOf(input[i])}`);
}
k : 0
s : 1
e : 2
k : 0
k : 0
s : 1
e : 2
t : 7
- 자바스크립트 문법 팁
String.Prototype.indexOf(문자)
: 특정 값의 최초 인덱스를 반환한다.
Array.Prototype.includes(값)
: 특정 값이 배열에 있는지 확인한다.
Set.Prototype.has(값)
: 특정 값이 집합에 있는지 확인한다.
Set.Prototype.add(값)
: 특정 값을 집합에 추가한다.
이때 집합의 인덱스는 무의미함에 한다.
템플릿 리터럴
자바스크립트에는 문자열 포맷팅이 없다. 대신 템플릿 리터럴을 사용할 수 있다.
///정규표현식을 사용한다. 문자열은 %s로 받고, 데이터나 숫자는 $d로 받는다.
console.log("철수의 키는 %dcm이며 몸무게는 %dkg입니다", 162, 92);
console.log("민수의 키는 %dcm이며 몸무게는 %dkg입니다", height, weight);
/* ${변수명}을 이용한 템플릿 리터럴. 템플릿 리터럴을 사용할 때 백틱(`)을 이용하면
템플릿을 한 번에 인식하며, 줄바꿈과 따옴표도 인식한다. */
console.log(`철수의 키는 ${162}이며 민수의 키는 ${height}이다.
두 키의 합은 ${162 + height}이다.`);
철수의 키는 162이며 민수의 키는 162이다.
두 키의 합은 324이다.
중복단어제거
N개의 문자열이 입력되면 중복된 문자열은 제거하고 출력.
- 입력예제
5
good
time
good
time
student
- 출력예제
good
time
student
- 답안
//인풋을 입력받습니다.
const fs = require("fs");
const { arrayBuffer } = require("stream/consumers");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\r\n");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer = [];
for (i = 1; i < input[0] + 1; i++) {
if (i === input.indexOf(input[i])) answer.push(input[i]);
}
console.log(answer);
}
solution(input);
- 풀이 해설
새로운 배열을 정의할 땐 []를 사용할 수 있다.
한편 입력을 받는 과정에서 강제개행의 방식에 따라 인풋이 꼬일 수 있다. console.log로 틈틈히 확인하자.
ArrayProto.push(값) : 값을 배열의 마지막으로 푸쉬한다.
ArrayProto.filter(function(){}, (thisArg)) : 필터 메소드는 함수의 인자에서 함수값이 True인 경우 인자를 배열로 반환한다. 함수의 결과값을 리턴받고 싶은 경우 thisArg를 사용한다.
//인풋을 입력받습니다.
const fs = require("fs");
const { arrayBuffer } = require("stream/consumers");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\r\n");
//solution함수 안에 답안을 작성하세요.
function solution(input) {
let answer;
input.shift();
answer = input.filter(function (v, i) {
return input.indexOf(v) === i;
});
console.log(answer);
}
solution(input);
- 자바스크립트 문법 팁
Array.Prototype.filter((element, index) => {...})
: 콜백 함수의 값이 true인 요소들로 이루어진 새로운 배열을 반환한다.