Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solve #219

Open
wants to merge 23 commits into
base: master
Choose a base branch
from
Open

Solve #219

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions Challenge/wipddsu/everyArray/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 문제제목

## 설명

every를 이용해서 모든 원소가 짝수인지 아닌지를 판별하세요

## Expected Output

true
5 changes: 5 additions & 0 deletions Challenge/wipddsu/everyArray/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function solution(inputArray) {
return inputArray.every((el) => el % 2 === 0);
}

exports.solution = solution;
21 changes: 21 additions & 0 deletions Challenge/wipddsu/everyArray/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const { solution } = require("./solve");

const test1 = {
input: [2, 4, 6, 8, 10],
answer: true,
};

const test2 = {
input: [2, 3, 6, 8, 10],
answer: false,
};

describe("everyArray", () => {
test("모두 짝수면 true여야 한다.", () => {
expect(solution(test1.input)).toEqual(test1.answer);
});

test("홀수가 있으면 false여야 한다.", () => {
expect(solution(test2.input)).toEqual(test2.answer);
});
});
3 changes: 3 additions & 0 deletions Challenge/wipddsu/expDivOdd/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 설명

제곱한 후 3으로 나눈 나머지가 홀수인 것 을 뽑은 배열의 총 합을 구하세요.
6 changes: 6 additions & 0 deletions Challenge/wipddsu/expDivOdd/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
function solution(inputArray) {
inputArray = inputArray.map((el) => el ** 2).filter((item) => (item % 3) % 2 !== 0);
return inputArray.reduce((acc, cur) => acc + cur, 0);
}

exports.solution = solution;
21 changes: 21 additions & 0 deletions Challenge/wipddsu/expDivOdd/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const { solution } = require('./solve');

const test1 = {
input: [1, 7, 3, 4, 6],
answer: 66,
};

const test2 = {
input: [2, 3, 6, 8, 10],
answer: 168,
};

describe('everyArray', () => {
test('1, 7, 3, 4, 6', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});

test('2, 3, 6, 8, 10', () => {
expect(solution(test2.input)).toEqual(test2.answer);
});
});
35 changes: 35 additions & 0 deletions Challenge/wipddsu/figureSkating/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
## 설명

점수를 계산해서 점수가 높은 순으로 name과 score를 가진 객체의 배열을 출력하세요.
단 실격자는 출력하지 않습니다.

### 피겨 점수 기준

피겨 점수는 ‘기술점수(TES)+예술점수(PCS)-감점’으로 구성된다.

기술점수(TES·Total Element Score)는 기본점수에 수행점수(GOE·Grade Of Execution)를 합산해 도출한다.

심판은 선수들이 점프와 스핀의 기술을 제대로 수행하는지 살핀다. 점프에선 회전수를 제대로 지켰는지, 에지를 제대로 사용했는지에 따라 ‘롱 에지’(잘못된 에지 사용)나 ‘다운그레이드’(난이도 하락), ‘어텐션’(주의) 등의 판정을 내린다. 스핀과 스텝시퀀스에 붙는 레벨(1~4)도 이들이 결정한다.

9명의 심판은 선수들이 미리 제출한 연기 구성표를 기준으로 과제별 기본점수에서 가·감점을 한다. 이른바 ‘GOE’라 불리는 수행점수다.

쇼트프로그램은 점프 3개, 스핀 3개, 스텝 1개의 수행과제가 반드시 포함돼야 한다.

예술점수(PCS·Total Program Component Score)는 프로그램의 완성도에 영향을 미치는 스케이팅 기술·동작의 연결·연기·안무·곡 해석 등 5가지를 평가한다.

마지막으로 감점이 반영된다. 감점 항목이 발생할 때마다 1점씩 감점된다.

원문보기:
http://news.khan.co.kr/kh_news/khan_art_view.html?art_id=201402172146545#csidx6329aebb6a02152bca884614a7f0544

### 판정 기준

- 점수가 가장 높은 사람이 1등이다.
- 점수는 기술점수(TES) + 예술점수(PCS) - 감점 으로 구성된다.
- 기술점수(TES)는 기본점수 \* 수행점수(GOE)를 합산해 도출한다.
- 필수 수행과제를 수행하지 못했을 시 실격이다.

### 필수 수행과제

- 쇼트프로그램은 점프 3개, 스핀 3개, 스텝 1개의 수행과제가 반드시 포함돼야 한다.
- 점프와 스핀을 4번 이상 수행했을 시 가장 잘한 3개를 기준으로 한다.
49 changes: 49 additions & 0 deletions Challenge/wipddsu/figureSkating/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// 기본 점수
const baseScore = {
jump: 10,
spin: 20,
step: 15,
};

const baseAssignment = {
jump: 3,
spin: 3,
step: 1,
};

// write your codes

function solution(inputArray) {
const newInput = inputArray.filter((item) => item['goe']['jump'].length > 2 && item['goe']['spin'].length > 2);
const answer = [];

for (const el of newInput) {
const newObj = {};
const name = el['name'];
const goes = el['goe'];
const scoreArr = [];

for (const key in goes) {
const sorting = goes[key].sort((a, b) => b - a);
// 배열을 내림차순 정렬 후 앞에서 3개의 값의 합만 구하기
const scoreSum = sorting.reduce((acc, cur, i) => (i < 3 ? acc + cur : acc), 0);
scoreArr.push(scoreSum);
}

const [jumpScore, spinScore, stepScore] = [...scoreArr];

newObj['name'] = name;
newObj['score'] =
jumpScore * baseScore['jump'] +
spinScore * baseScore['spin'] +
stepScore * baseScore['step'] +
el['pcs'] -
el['penalty'];

answer.push(newObj);
}

return answer;
}

exports.solution = solution;
46 changes: 46 additions & 0 deletions Challenge/wipddsu/figureSkating/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const { solution } = require('./solve');

const test1 = {
input: [
{
name: '김연아',
goe: {
jump: [10, 9, 10],
spin: [10, 10, 10],
step: [9],
},
pcs: 30,
penalty: 0,
},
{
name: '피겨의 신',
goe: {
jump: [10000, 10000],
spin: [10000, 10000, 10000],
step: [10000],
},
pcs: 100000,
penalty: 0,
},
{
name: '아사다 마오',
goe: {
jump: [9, 6, 8, 9],
spin: [9, 9, 9],
step: [8],
},
pcs: 29,
penalty: 10,
},
],
answer: [
{ name: '김연아', score: 1055 },
{ name: '아사다 마오', score: 939 },
],
};

describe('everyArray', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
});
3 changes: 3 additions & 0 deletions Challenge/wipddsu/filterAge/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 설명

배열 원소의 age가 30이상 50미만인 사람만 있는 객체의 배열을 만드세요
8 changes: 8 additions & 0 deletions Challenge/wipddsu/filterAge/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// write your codes
function solution(inputArray) {
const result = inputArray.filter((item) => item['age'] >= 30 && item['age'] < 50);

return result;
}

exports.solution = solution;
32 changes: 32 additions & 0 deletions Challenge/wipddsu/filterAge/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const { solution } = require('./solve');

const test1 = {
input: [
{
name: '영미',
age: 25,
},
{
name: '일미',
age: 35,
},
{
name: '이미',
age: 45,
},
{
name: '삼미',
age: 55,
},
],
answer: [
{ name: '일미', age: 35 },
{ name: '이미', age: 45 },
],
};

describe('filterAge', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
});
5 changes: 5 additions & 0 deletions Challenge/wipddsu/filterIntersection/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 문제제목

## 설명

두 배열의 교집합을 출력하세요!
5 changes: 5 additions & 0 deletions Challenge/wipddsu/filterIntersection/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
function solution(inputArray1, inputArray2) {
return inputArray1.filter((item) => inputArray2.includes(item));
}

exports.solution = solution;
15 changes: 15 additions & 0 deletions Challenge/wipddsu/filterIntersection/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const { solution } = require('./solve');

const test1 = {
input: {
A: [1, 2, 3, 4, 5],
B: [3, 4, 5, 6, 7],
},
answer: [3, 4, 5],
};

describe('filterIntersection', () => {
test('test1', () => {
expect(solution(test1.input.A, test1.input.B)).toEqual(test1.answer);
});
});
3 changes: 3 additions & 0 deletions Challenge/wipddsu/filterOdd/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 설명

홀수만 뽑아 배열로 만드세요
6 changes: 6 additions & 0 deletions Challenge/wipddsu/filterOdd/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// write your codes
function solution(inputArray) {
return inputArray.filter((el) => el % 2 === 1);
}

exports.solution = solution;
28 changes: 28 additions & 0 deletions Challenge/wipddsu/filterOdd/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const { solution } = require('./solve');

const test1 = {
input: [4, 2, 5, 1, 3],
answer: [5, 1, 3],
};

const test2 = {
input: [4, 2, 6, 8, 50, 16],
answer: [],
};

const test3 = {
input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
answer: [1, 3, 5, 7, 9, 11],
};

describe('filterOdd', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
test('test2', () => {
expect(solution(test2.input)).toEqual(test2.answer);
});
test('test3', () => {
expect(solution(test3.input)).toEqual(test3.answer);
});
});
9 changes: 9 additions & 0 deletions Challenge/wipddsu/findWord/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 문제제목

## 설명

용가리라는 단어가 있으면 true 없으면 false를 출력

## Expected Output

true
6 changes: 6 additions & 0 deletions Challenge/wipddsu/findWord/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// write your codes
function solution(inputArray) {
return inputArray.some((el) => el === '용가리');
}

exports.solution = solution;
26 changes: 26 additions & 0 deletions Challenge/wipddsu/findWord/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const { solution } = require('./solve');

const test1 = {
input: ['잠', '자', '고', '싶', '다', '용가리'],
answer: true,
};
const test2 = {
input: ['맛있는', '용가리치킨'],
answer: false,
};
const test3 = {
input: ['고질라', '용가리 ', '울트라맨'],
answer: false,
};

describe('findWord', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
test('test2', () => {
expect(solution(test2.input)).toEqual(test2.answer);
});
test('test3', () => {
expect(solution(test3.input)).toEqual(test3.answer);
});
});
3 changes: 3 additions & 0 deletions Challenge/wipddsu/forEachFilter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 설명

배열 원소중 40 이상인 수만 뽑아 배열을 만드세요.
6 changes: 6 additions & 0 deletions Challenge/wipddsu/forEachFilter/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// write your codes
function solution(inputArray) {
return inputArray.filter((item) => item >= 40);
}

exports.solution = solution;
12 changes: 12 additions & 0 deletions Challenge/wipddsu/forEachFilter/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const { solution } = require('./solve');

const test1 = {
input: [100, 10, 20, 40],
answer: [100, 40],
};

describe('forEachFilter', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
});
3 changes: 3 additions & 0 deletions Challenge/wipddsu/forEachFilterIsNaN/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## 설명

배열 원소중 숫자인 원소만 뽑아 배열을 만드세요.
6 changes: 6 additions & 0 deletions Challenge/wipddsu/forEachFilterIsNaN/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// write your codes
function solution(inputArray) {
return inputArray.filter((item) => typeof item === 'number');
}

exports.solution = solution;
Loading