Skip to content
Open
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
58 changes: 58 additions & 0 deletions 주중8B/hyejung/Week04/1. 피보나치 수.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/**
* 통과 여부 : O
* 시간 : 30분
* 점수 : + 15
*/

// 시도 3 : 재귀 호출을 사용하면 어느 시점에서는 스택오버플로우가 발생하기 때문에 13, 14 테스트케이스는 통과를 못하는 것 같다.
// 따라서 재귀가 아니라 for문을 사용해야한다. for문으로 직접 수를 계산해서 넣고, 계산된 수를 리턴한다.
function reference(n) {
const arr = [0, 1, 1];

// 늘 그렇듯 n 이 0이나 1, 2가 들어오면 값을 알고 있기 때문에 그 값을 리턴해준다.
if (n <= 1) return arr[n];
// 그 이외의 경우에는 n까지 반복을 돌아준다. arr 안에 이미 계산된 값을 가지고 직접 값을 계산해준다.
// 수가 커지기 때문에 각 수를 1234567로 나눈 나머지로 하여 저장!23
for (let i = 3; i <= n; i++) {
arr.push((arr[i - 1] + arr[i - 2]) % 1234567);
}

return arr[n];
}

console.log(reference(5));

// 시도 2 : 테스트케이스 13,14를 제외하고는 통과.
/*
function solution(n) {
const memo = [0, 1];

function aux(n) {
if (memo[n] !== undefined) return memo[n];

memo[n] = (aux(n - 1) + aux(n - 2)) % 1234567;
return memo[n];
}

return aux(n);
}
console.log(solution(5));
*/

// 시도 1 : 테스트케이스 1 ~6 통과, 그 이후는 통과 X
/*
function solution(n) {
const memo = [0, 1];

function aux(n) {
if (memo[n] !== undefined) return memo[n];

memo[n] = aux(n - 1) + aux(n - 2);
return memo[n];
}

return aux(n) % 1234567;
}

console.log(solution(5));
*/
41 changes: 41 additions & 0 deletions 주중8B/hyejung/Week04/2. 다음 큰 숫자.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/**
* 통과 여부 : O
* 시간 : 30분
* 점수 : + 10
*/

// 시도 2 : 시도 1의 코드를 좀 더 간단하게 바꿨음
// 함수를 따로 빼지 않고, 변수를 따로 만들지 않고, while 문 안에서 바로 리턴하도록 고침.
function solution2(num) {
let target = num.toString(2).match(/1/g).length;
while (true) {
num++;
if (num.toString(2).match(/1/g).length === target) return num;
}
}

const result2 = solution2(78);
console.log(result2);

// 시도 1 : 실제로 1의 갯수를 비교해서 풀었더니 틀렸음 :)
// 테스트케이스 2,6,8,11,13,14 실패
// 효율성 테스트 4 실패
/*
function countOne(n) {
return n.toString(2).match(/1/g).length;
}

function solution1(num) {
let target = countOne(num);
let answer = 0;
let n = num + 1;
while (target !== answer) {
n++;
answer = countOne(n);
}
return n;
}

const result = solution1(15);
console.log(result);
*/
37 changes: 37 additions & 0 deletions 주중8B/hyejung/Week04/3. 콜라 문제.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
function solution1(a, b, n) {
// 바꾼 콜라의 갯수가 누적될 sum
let sum = 0;

// n을 계속 줄여가면서 한 번에 바꿀 수 없는 수가 될 때까지 반복!
while (n >= a) {
// 내가 가진 콜라를 최대한 바꾸려면... (최대한 바꿀 수 있는 빈 병 갯수 / 한 번에 줘야하는 갯수) * 바꿔주는 갯수
// 한 번에 줄 수 있는 갯수가 이만큼인데, 이만큼을 주면 한 번에 콜라를 몇 개를 준다더라 ~ 를 구하는 식.
let coke = parseInt((n - (n % a)) / a) * b;
// 바꿔먹은 콜라 갯수는 누적
sum += coke;
// 바꿔먹은 콜라 갯수란 다 먹고 다시 바꿀 수 있는 콜라 갯수이므로,
// 아까 바꾸지 못했던 남은 빈 병에 새롭게 얻은 콜라 갯수를 더해줌.
n = (n % a) + coke;
}
return sum;
}

const result1 = solution1(3, 1, 20);
console.log(result1);

/*
테스트 1 〉 통과 (0.16ms, 33.4MB)
테스트 2 〉 통과 (0.04ms, 33.4MB)
테스트 3 〉 통과 (0.11ms, 33.4MB)
테스트 4 〉 통과 (0.06ms, 33.4MB)
테스트 5 〉 통과 (0.04ms, 33.4MB)
테스트 6 〉 통과 (0.04ms, 33.5MB)
테스트 7 〉 통과 (0.04ms, 33.5MB)
테스트 8 〉 통과 (0.05ms, 33.4MB)
테스트 9 〉 통과 (0.17ms, 33.4MB)
테스트 10 〉 통과 (0.04ms, 33.5MB)
테스트 11 〉 통과 (0.04ms, 33.5MB)
테스트 12 〉 통과 (0.21ms, 33.4MB)
테스트 13 〉 통과 (0.03ms, 33.5MB)
테스트 14 〉 통과 (0.04ms, 33.6MB)
*/
86 changes: 86 additions & 0 deletions 주중8B/hyejung/Week04/4. 체육복.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
function reference(n, lost, reserve) {
// 학생들이 가지고 있는 체육복 수를 모두 1로 세팅
const clothes = Array(n).fill(1);

// 체육복을 도난당한 학생들의 체육복 수를 0으로
lost.map(lost => {
clothes[lost - 1] = 0;
});

// 여벌을 가지고 있는 학생들의 체육복 수 1 증가
reserve.map(reserve => {
clothes[reserve - 1] += 1;
});

for (let i = 0; i < n; i++) {
// 체육복이 0개인 학생이 앞사람한테 받아왔을 때
if (clothes[i] === 0 && clothes[i - 1] === 2) {
clothes[i] = 1;
clothes[i - 1] = 1;
}
// 체육복이 0개인 학생이 뒷사람한테 받아왔을 때
else if (clothes[i] === 0 && clothes[i + 1] === 2) {
clothes[i] = 1;
clothes[i + 1] = 1;
}
}

// 체육복이 한개 이상인 학생들의 수
return clothes.filter(c => c > 0).length;
}

const result2 = reference(3, [3], [1]);
console.log(result2);

// 5번, 12번 테스트케이스 실패 ㅠㅠ
const result = solution(3, [3], [1]);
console.log(result);

// 레퍼런스
/*
테스트 1 〉 통과 (0.23ms, 33.4MB)
테스트 2 〉 통과 (0.20ms, 33.4MB)
테스트 3 〉 통과 (0.16ms, 33.4MB)
테스트 4 〉 통과 (0.09ms, 33.4MB)
테스트 5 〉 통과 (0.17ms, 33.4MB)
테스트 6 〉 통과 (0.09ms, 33.5MB)
테스트 7 〉 통과 (0.17ms, 33.6MB)
테스트 8 〉 통과 (0.11ms, 33.5MB)
테스트 9 〉 통과 (0.09ms, 33.4MB)
테스트 10 〉 통과 (0.19ms, 33.5MB)
테스트 11 〉 통과 (0.08ms, 33.4MB)
테스트 12 〉 통과 (0.08ms, 33.6MB)
테스트 13 〉 통과 (0.08ms, 33.5MB)
테스트 14 〉 통과 (0.12ms, 33.5MB)
테스트 15 〉 통과 (0.09ms, 33.5MB)
테스트 16 〉 통과 (0.13ms, 33.4MB)
테스트 17 〉 통과 (0.10ms, 33.4MB)
테스트 18 〉 통과 (0.09ms, 33.4MB)
테스트 19 〉 통과 (0.09ms, 33.5MB)
테스트 20 〉 통과 (0.09ms, 33.4MB)
*/

// 내꺼...
/*
테스트 1 〉 통과 (0.10ms, 33.4MB)
테스트 2 〉 통과 (0.11ms, 33.5MB)
테스트 3 〉 통과 (0.10ms, 33.4MB)
테스트 4 〉 통과 (0.10ms, 33.5MB)
테스트 5 〉 실패 (0.18ms, 33.5MB)
테스트 6 〉 통과 (0.09ms, 33.4MB)
테스트 7 〉 통과 (0.17ms, 33.5MB)
테스트 8 〉 통과 (0.10ms, 33.4MB)
테스트 9 〉 통과 (0.09ms, 33.4MB)
테스트 10 〉 통과 (0.17ms, 33.4MB)
테스트 11 〉 통과 (0.09ms, 33.4MB)

12 〉 실패 (0.09ms, 33.4MB)
테스트 13 〉 통과 (0.09ms, 33.4MB)
테스트 14 〉 통과 (0.10ms, 33.4MB)
테스트 15 〉 통과 (0.09ms, 33.4MB)
테스트 16 〉 통과 (0.10ms, 33.4MB)
테스트 17 〉 통과 (0.09ms, 33.4MB)
테스트 18 〉 통과 (0.09ms, 33.5MB)
테스트 19 〉 통과 (0.10ms, 33.5MB)
테스트 20 〉 통과 (0.10ms, 33.5MB)
*/