Skip to content

Commit 16cde1f

Browse files
committed
Add 1 solution jaewon1676
1 parent 3caacd0 commit 16cde1f

19 files changed

+444
-5
lines changed

level-1/3진법-뒤집기.js

+7
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,11 @@ const decimalToTernaryReversed = num => {
2424
}
2525
ternary += num.toString()
2626
return ternary
27+
}
28+
29+
//정답 3 - jaewon1676
30+
function solution(n) {
31+
var answer = n.toString(3).split('').reverse().join('')
32+
33+
return parseInt(answer, 3)
2734
}

level-1/[1차]-비밀지도.js

+21-1
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,24 @@ function solution(n, arr1, arr2) {
3333
}
3434
answer = answer2D.map(row => row.join(''))
3535
return answer;
36-
}
36+
}
37+
38+
//정답 3 - jaewon1676
39+
function solution(n, arr1, arr2) {
40+
let answer = [];
41+
for (let i=0; i<n; i++){
42+
let temp = (arr1[i] | arr2[i]).toString(2)
43+
let line = []; // 한 행의 모든 2진수 보관
44+
45+
for (let j=temp.length - n; j< temp.length; j++){
46+
if (temp[j] == 1) {line.push('#')}
47+
else {line.push(' ')}
48+
}
49+
answer.push(line.join(''))
50+
}
51+
return answer
52+
}
53+
/* 풀이 과정
54+
1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다.
55+
2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다.
56+
3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/

level-1/로또의-최고-순위와-최저-순위.js

+38
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,42 @@ function hit(lottos, win_nums) {
4242
return result
4343
}
4444

45+
// 정답 3 - jaewon1676
46+
function solution(lottos, win_nums) {
47+
var answer = [];
48+
const correct = lottos.filter(lotto => win_nums.includes(lotto)).length;
49+
// lottos배열을 순회하며 당첨배열에 있는 수를 return 하고 총 개수를 correct에 저장
50+
51+
const zeros = lottos.filter(lotto => lotto === 0).length;
52+
// lottos배열을 순회하며 0인 총 개수를 zeros에 저장
53+
54+
let min = 7-correct >= 6 ? 6 : 7-correct;
55+
56+
let max = min-zeros < 1 ? 1 : min-zeros;
57+
58+
answer = [max,min]
59+
60+
return answer;
61+
}
4562

63+
// 정답 4 - jaewon1676
64+
function solution(lottos, win_nums) {
65+
var answer = [];
66+
let max = 7;
67+
let min = 7;
68+
console.log(lottos)
69+
console.log(win_nums)
70+
for(let i=0; i<6; i++){
71+
if (lottos.includes(win_nums[i])){
72+
max--;
73+
}
74+
}
75+
min = max;
76+
for(let i=0; i<6; i++){
77+
if (lottos[i] == 0) min--;
78+
}
79+
if (max == 7) max = 6
80+
if (min == 7) min = 6
81+
answer = [min, max]
82+
return answer;
83+
}

level-1/숫자-문자열과-영단어.js

+19
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,23 @@ function solution(s) {
2323
}
2424
answer = Number(answerString)
2525
return answer;
26+
}
27+
28+
//정답 3 - jaewon1676
29+
function solution(s) {
30+
let answer = 0;
31+
32+
s = s.replace(/zero/g, 0);
33+
s = s.replace(/one/g, 1);
34+
s = s.replace(/two/g, 2);
35+
s = s.replace(/three/g, 3);
36+
s = s.replace(/four/g, 4);
37+
s = s.replace(/five/g, 5);
38+
s = s.replace(/six/g, 6);
39+
s = s.replace(/seven/g, 7);
40+
s = s.replace(/eight/g, 8);
41+
s = s.replace(/nine/g, 9);
42+
43+
answer = Number(s);
44+
return answer;
2645
}

level-1/신고-결과-받기.js

+32
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,35 @@ function solution(id_list, report, k) {
3535

3636
return answer
3737
}
38+
39+
//정답 2 - jaewon1676
40+
function solution(id_list, report, k) {
41+
42+
let answer = new Array(id_list.length).fill(0)
43+
let report_list = {} // 신고당한 ID
44+
45+
// key, value 형식의 report_list 객체를 만든다.
46+
id_list.map((user)=>{
47+
report_list[user] = [] //key = userid , value = 빈 배열을 가지는 객체
48+
})
49+
// report_list { muzi: [], frodo: [], apeach: [], neo: [] }
50+
51+
// 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다.
52+
report.map((user)=>{
53+
const [user_id, report_id] = user.split(' ')
54+
// report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다.
55+
if(!report_list[report_id].includes(user_id)){
56+
report_list[report_id].push(user_id)
57+
// 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.
58+
}
59+
60+
})
61+
for(const key in report_list){ // report_list의 index 순회
62+
if(report_list[key].length >= k){
63+
report_list[key].map((user)=>{
64+
answer[id_list.indexOf(user)] += 1
65+
})
66+
}
67+
}
68+
return answer
69+
}

level-1/신규-아이디-추천.js

+31
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,35 @@ function solution(new_id) {
4444
break
4545
}
4646
return answer
47+
}
48+
49+
//정답 3 - jaewon1676
50+
function solution(new_id) {
51+
// 1 소문자로 치환
52+
let answer = new_id.toLowerCase()
53+
54+
// 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거.
55+
.replace(/[^a-z0-9-_.]/gi, '')
56+
57+
// 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
58+
.replace(/[.]{2,}/gi, '.')
59+
60+
// 4 마침표(.)가 처음이나 끝에 위치하면 제거
61+
.replace(/^[.]|[.]$/gi,'');
62+
63+
// 5 빈 문자열이면 a 대입
64+
if(answer==='') answer = 'a';
65+
66+
// 6 length > 15이면 그 뒤의 문자들은 제거
67+
if(answer.length > 15){
68+
answer = answer.substring(0, 15);
69+
// 마침표(.)가 끝에 위치하면 마침표(.)제거
70+
answer = answer.replace(/[.]$/gi,'');
71+
}
72+
73+
// 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임
74+
while(answer.length < 3){
75+
answer += answer[answer.length-1];
76+
}
77+
return answer;
4778
}

level-1/실패율.js

+41-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,44 @@ function solution(N, stages) {
3030
const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0])
3131
answer = sortedRate.map(stage => stage[1])
3232
return answer;
33-
}
33+
}
34+
35+
//정답 3 - jaewon1676
36+
function solution(N, stages) {
37+
let map = Array.from(Array(N), () => Array(2).fill(0))
38+
let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수
39+
let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율
40+
let count = 0;
41+
42+
stages.sort(function(a, b){ return a - b}) // 난이도 오름차순 정렬
43+
for (let i=1; i<=N; i++){
44+
while(1){ // i 스테이지의 실패율 계산
45+
if (stages[0] == i){
46+
answer[i-1] += 1
47+
count += 1
48+
stages.shift();
49+
}
50+
else break;
51+
}
52+
rate[i-1] += answer[i-1]/(stages.length + count) // 실패율 계산
53+
54+
count = 0
55+
56+
map[i-1][0] = i;
57+
map[i-1][1] = rate[i-1];
58+
59+
}
60+
map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬
61+
let stack = [] // 답
62+
for(let i=0; i<map.length; i++){
63+
stack.push(map[i][0])
64+
}
65+
66+
return stack
67+
}
68+
/* 풀이 과정
69+
1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다.
70+
2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다.
71+
3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서.
72+
4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다.
73+
*/

level-1/완주하지-못한-선수.js

+20
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,24 @@ function solution(participant, completion) {
1010
}
1111
answer = participant[participant.length - 1]
1212
return answer
13+
}
14+
15+
//정답 2 - jaewon1676
16+
function solution(participant, completion) {
17+
var answer = '';
18+
for (let i=0; i<participant.length; i++){
19+
for (let j=0; j<completion.length; j++){
20+
if (participant[i] === completion[j]) {
21+
console.log(participant,completion)
22+
participant.splice(i, 1)
23+
completion.splice(j, 1)
24+
i--;
25+
j--;
26+
console.log(participant,completion)
27+
break;
28+
}
29+
}
30+
}
31+
32+
return participant[0]
1333
}

level-1/음양-더하기.js

+15
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,20 @@ function solution(absolutes, signs) {
1313
for (let i = 0; i < absolutes.length; i++) {
1414
answer += signs[i] ? absolutes[i] : -1 * absolutes[i]
1515
}
16+
return answer;
17+
}
18+
19+
//정답 3 - jaewon1676
20+
function solution(absolutes, signs) {
21+
var answer = 0
22+
for(var i=0; i<absolutes.length; i++){
23+
if (signs[i] === false){
24+
answer = answer - absolutes[i]
25+
}
26+
else{
27+
answer = answer + absolutes[i]
28+
}
29+
}
30+
1631
return answer;
1732
}

level-1/크레인-인형뽑기-게임.js

+31-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,34 @@ function solution(board, moves) {
2222
})
2323

2424
return answer;
25-
}
25+
}
26+
27+
//정답 2 - jaewon1676
28+
function solution(board, moves) {
29+
var answer = 0; // 인형을 터뜨린 횟수
30+
let basket = []; // 바구니
31+
let crane = 0; // 크레인의 행의 위치
32+
for (let i=0; i<moves.length; i++){
33+
crane = moves[i] - 1; // crane = 0
34+
for (let j=0; j<board.length; j++){
35+
if (board[j][crane] == 0) continue;
36+
else if (board[j][crane] != 0){
37+
basket.push(board[j][crane])
38+
board[j][crane] = 0
39+
if (basket[basket.length-1] == basket[basket.length-2]){
40+
basket.pop();
41+
basket.pop();
42+
answer += 2;
43+
}
44+
break;
45+
}
46+
}
47+
}
48+
49+
return answer;
50+
}
51+
/* 풀이 과정
52+
1. 입력받은 moves의 length만큼 for문을 돌린다.
53+
2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다.
54+
3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다.
55+
4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */

level-1/평균-구하기.js

+9
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,13 @@
44
function solution(arr) {
55
var answer = arr.reduce((prev, current) => prev + current) / arr.length
66
return answer;
7+
}
8+
9+
//정답 2 - jaewon1676
10+
function solution(arr) {
11+
var answer = 0;
12+
for (var i = 0; i < arr.length; i++) {
13+
answer += arr[i]
14+
}
15+
return answer / arr.length;
716
}

level-2/124-나라의-숫자.js

+13
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,17 @@ function solution(n) {
2626
}
2727
}
2828
return answer;
29+
}
30+
31+
//정답 3 - jaewon1676
32+
function solution(n) {
33+
const number = [ 4, 1, 2];
34+
let answer = "";
35+
36+
while(n){ //
37+
answer = number[n%3] + answer;
38+
n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3);
39+
}
40+
41+
return answer
2942
}

level-2/H-Index.js

+13
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,17 @@ function solution(citations) {
2121
}
2222
answer = h - 1
2323
return answer;
24+
}
25+
26+
//정답 3 - jaewon1676
27+
function solution(citations) {
28+
var answer = 0;
29+
citations.sort((a,b)=>(b-a))
30+
31+
for(var i=0; i<citations.length; i++){
32+
if (i < citations[i]){
33+
answer +=1;
34+
}
35+
}
36+
return answer;
2437
}

0 commit comments

Comments
 (0)