Skip to content

Commit 50a7f11

Browse files
committed
2 parents 8d0ad97 + 8874a00 commit 50a7f11

6 files changed

+204
-0
lines changed

Diff for: 2주차/이진아/레벨3_베스트앨범.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function solution(genres, plays) {
2+
let answer = [];
3+
// 각 노래에 대한 정보를 포함하는 객체들의 배열을 생성
4+
let songs = genres.map((genre, index) => {
5+
return {
6+
no: index, // 노래의 인덱스
7+
genre: genre, // 노래의 장르
8+
play: plays[index] // 노래의 재생 횟수
9+
}
10+
});
11+
12+
// 각 장르별 총 재생 횟수를 나타내는 배열을 생성
13+
let genrePlayCnt = [];
14+
songs.forEach(song => {
15+
let thisGenre = genrePlayCnt.find(genrePlay => genrePlay.genre === song.genre);
16+
if(!thisGenre){
17+
// 해당 장르가 처음 등장하는 경우, 배열에 추가
18+
genrePlayCnt.push({
19+
genre: song.genre,
20+
play: song.play
21+
});
22+
} else {
23+
// 해당 장르가 이미 등장한 경우, 기존 재생 횟수에 더함
24+
thisGenre.play += song.play;
25+
}
26+
});
27+
28+
// 장르별로 총 재생 횟수를 기준으로 내림차순 정렬
29+
genrePlayCnt.sort((a, b) => b.play - a.play);
30+
31+
// 각 장르별로 두 개의 노래를 선택하여 결과 배열에 추가
32+
genrePlayCnt.forEach(genrePlay => {
33+
// 현재 장르에 속하는 노래들을 찾음
34+
let thisGenreSongs = songs.filter(song => song.genre === genrePlay.genre);
35+
// 해당 노래들을 재생 횟수를 기준으로 내림차순 정렬
36+
thisGenreSongs.sort((a, b) => b.play - a.play);
37+
// 가장 재생 횟수가 많은 노래의 인덱스를 결과 배열에 추가
38+
answer.push(thisGenreSongs[0].no);
39+
// 해당 장르에 두 개 이상의 노래가 있는 경우, 두 번째로 재생 횟수가 많은 노래의 인덱스도 추가
40+
if(thisGenreSongs.length > 1){
41+
answer.push(thisGenreSongs[1].no);
42+
}
43+
});
44+
45+
// 최종 결과를 반환
46+
return answer;
47+
}

Diff for: 2주차/이진아/실버4_대칭차집합.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const input = require("fs").readFileSync("dev/stdin").toString().split("\n");
2+
3+
let A = new Set(input[1].split(" ").map(a => +a));
4+
const B = input[2].split(" ").map(a => +a);
5+
6+
//B 배열의 각 요소에 대해 반복문 실행
7+
// B 배열의 각 요소를 검사하여 해당 요소가 Set A에 이미 존재한다면 삭제하고, 없다면 추가
8+
B.forEach(el => {
9+
if (A.has(el) === false) { A.add(el); } else { A.delete(el); }
10+
11+
});
12+
13+
console.log(A.size);

Diff for: 2주차/이진아/실버4_문자열집합.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');
2+
3+
const [N, M] = input[0].split(' ').map(Number);
4+
//1번 인덱스부터 N개의 요소를 저장
5+
const N_data = input.slice(1, 1 + N);
6+
//N+1번 인덱스부터 끝까지의 요소를 저장
7+
const M_data = input.slice(1 + N);
8+
9+
let count = 0;
10+
11+
const resultObject = {};
12+
13+
N_data.forEach((ele) => (resultObject[ele] = true));
14+
15+
M_data.forEach((ele) => {
16+
if (resultObject[ele]) count++;
17+
});
18+
19+
console.log(count)

Diff for: 2주차/채수혁/레벨3__베스트앨범.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
function solution(genres, plays) {
2+
const genreMap = {};
3+
4+
/**
5+
* {
6+
* classic: [
7+
* { 0: 500 },
8+
* { 2: 150 },
9+
* { 3: 800 },
10+
* ],
11+
* pop: [
12+
* { 1: 600 },
13+
* { 4: 2500 },
14+
* ]
15+
* }
16+
*/
17+
genres.forEach((genre, index) => {
18+
const genrePlays = genreMap[genre];
19+
if (!genrePlays)
20+
genreMap[genre] = [
21+
{
22+
[index]: plays[index],
23+
},
24+
];
25+
else {
26+
genrePlays.push({ [index]: plays[index] });
27+
}
28+
});
29+
const ok = Object.keys(genreMap)
30+
.map((key) => {
31+
const value = genreMap[key];
32+
const sum = value.reduce((a, v) => a + Object.values(v)[0], 0);
33+
value.sort((a, b) => Object.values(b)[0] - Object.values(a)[0]);
34+
const slicedValue = value.slice(0, 2);
35+
return { [sum]: slicedValue };
36+
})
37+
.sort((a, b) => parseInt(Object.keys(b), 10) - parseInt(Object.keys(a), 10))
38+
.flatMap((v) => {
39+
const object = Object.values(v)[0].map((v2) =>
40+
Number(Object.keys(v2)[0])
41+
);
42+
return object;
43+
});
44+
return ok;
45+
}

Diff for: 2주차/채수혁/실버4__대칭_차집합.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
const local_input = `
2+
3 5
3+
1 2 4
4+
2 3 4 5 6
5+
`;
6+
7+
const input = process.execArgv.includes("--stack-size=65536")
8+
? require("fs").readFileSync("dev/stdin").toString()
9+
: local_input;
10+
11+
const inputs = input.trim().split("\n");
12+
const [aSize, bSize] = inputs[0].split(" ").map((v) => Number(v));
13+
14+
// 집합 받기
15+
const [aSet, bSet] = inputs
16+
.slice(1, 3)
17+
.map((str) => str.split(" ").reduce((a, v) => a.set(v, true), new Map()));
18+
19+
// 대칭 차집합의 원소의 갯수
20+
let cnt = 0;
21+
// 같은 키 갯수
22+
let sum = 0;
23+
for (const [key, value] of aSet) {
24+
if (bSet.get(key)) sum++;
25+
}
26+
// 전체 사이즈 에서 같은 키 갯수를 빼면 차집합 의 갯수
27+
cnt += bSet.size - sum;
28+
29+
// 초기화 후 다른 집합에 대해 반복
30+
sum = 0;
31+
for (const [key, value] of bSet) {
32+
if (aSet.get(key)) sum++;
33+
}
34+
cnt += aSet.size - sum;
35+
// 출력
36+
console.log(cnt);

Diff for: 2주차/채수혁/실버4__문자열_집합.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const local_input = `
2+
5 11
3+
baekjoononlinejudge
4+
startlink
5+
codeplus
6+
sundaycoding
7+
codingsh
8+
baekjoon
9+
codeplus
10+
codeminus
11+
startlink
12+
starlink
13+
sundaycoding
14+
codingsh
15+
codinghs
16+
sondaycoding
17+
startrink
18+
icerink
19+
`;
20+
21+
const input = process.execArgv.includes("--stack-size=65536")
22+
? require("fs").readFileSync("dev/stdin").toString()
23+
: local_input;
24+
25+
const inputs = input.trim().split("\n");
26+
27+
const [n, m] = inputs[0].split(" ").map((v) => Number(v));
28+
29+
const mapS = new Map();
30+
31+
// n 만큼 해시 테이블 만들기
32+
for (let i = 0; i < n; i++) {
33+
const key = inputs[1 + i];
34+
mapS.set(key, true);
35+
}
36+
// m 만큼 돌면서 해시테이블 이 적용되어있는지 보기
37+
let cnt = 0;
38+
for (let i = 0; i < m; i++) {
39+
const key = inputs[1 + n + i];
40+
if (mapS.get(key)) {
41+
cnt++;
42+
}
43+
}
44+
console.log(cnt);

0 commit comments

Comments
 (0)