Skip to content
Merged
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
27 changes: 27 additions & 0 deletions 임서인/28주차/둘만의암호.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
function solution(s, skip, index) {
let answer = '';
const skipSet = new Set(skip);

for (let char of s) {
let count = 0;
let current = char;

while (count < index) {
current = String.fromCharCode(current.charCodeAt(0) + 1);

if (current > 'z') current = 'a';

if (!skipSet.has(current)) {
count++;
}
}

answer += current;
}

return answer;
}

// 풀이
// * skip을 Set으로 만들어서 탐색 속도 높이기
// 아스키코드로 변환하여 1씩 증가시키면서 skip에 없으면 카운트
6 changes: 6 additions & 0 deletions 임서인/28주차/문자열돌리기.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const str = require('fs').readFileSync('/dev/stdin').toString().trim();

console.log(str.split('').join('\n'));

// 풀이
// close는 입력이 끝난 후 실행되기 때문에 그 안에서 출력하면 무조건 정상동작
12 changes: 12 additions & 0 deletions 임서인/28주차/수조작하기.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
function solution(numLog) {
const map = { 1: "w", "-1": "s", 10: "d", "-10": "a" };

return numLog
.slice(1)
.map((val, i) => map[val - numLog[i]])
.join("");
}

// 풀이
// 연속된 두 값의 차이를 구해 map 객체로 대응하는 문자로 변환
// slice(1)로 두 번째 원소부터 순회하고 key로 문자를 찾는다
6 changes: 6 additions & 0 deletions 임서인/28주차/할일목록.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
function solution(todo_list, finished) {
return todo_list.filter((_, i) => !finished[i]);
}

// 풀이
// finished[i]가 false인 항목만 filter로 걸러 반환
25 changes: 25 additions & 0 deletions 임서인/28주차/햄버거만들기.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
function solution(ingredient) {
const stack = [];
const pattern = [1, 2, 3, 1];
let count = 0;

for (const item of ingredient) {
stack.push(item);

if (stack.length >= 4) {
const top4 = stack.slice(-4);
if (top4.every((val, i) => val === pattern[i])) {
stack.splice(-4, 4);
count++;
}
}
}

return count;
}


// 풀이
// 재료를 하나씩 push한 후, 스택 상단 4개가 햄버거 패턴 [1, 2, 3, 1]인지 확인한다.
// 패턴이 일치하면 상단 4개를 스택에서 제거하고 count를 1 증가시킨다.

44 changes: 44 additions & 0 deletions 임서인/이전회차/27주차/입국심사.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// 문제: 입국심사
// n명이 심사를 받는 데 걸리는 최소 시간을 구해라
//
// ────────────────────────────────────────────
// 이진 탐색 적용 이유:
// → "최솟값을 구해라" (최소 시간)
// → 거꾸로: "T 분이 주어지면 n명을 다 처리할 수 있어?"
// → 각 심사관 i는 T분 동안 floor(T / times[i])명 처리 가능
// → sum(floor(T / times[i])) >= n 이면 가능!
// → T가 클수록 항상 가능 (단조성 ✓) → 이진 탐색!

function solution(n, times) {
let minTime = 1;
let maxTime = Math.min(...times) * n; // 가장 빠른 심사관이 n명 전부 처리하는 시간

while (minTime < maxTime) {
const midTime = Math.floor((minTime + maxTime) / 2);

// midTime 분 동안 처리 가능한 총 인원
const processedCount = times.reduce(
(sum, t) => sum + Math.floor(midTime / t),
0,
);

if (processedCount >= n) {
maxTime = midTime; // 가능하면 더 줄여보기
} else {
minTime = midTime + 1; // 불가능하면 더 늘려야 함
}
}

return minTime;
}

// T분 동안 심사관 i가 처리할 수 있는 인원 = floor(T / times[i])
// → 전체 합계가 n 이상이면 가능!
// 금과은 문제랑 구조가 똑같음 "T를 고정하고 가능 여부 체크

// 테스트
// console.log(solution(6, [7, 10])); // 28

// www.google.com을 주소창에 입력하면 어떻게 될까요?


Loading