From d61b7a48393938209e71669ba3b9e26baacc8b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= Date: Fri, 23 Jan 2026 11:59:06 +0900 Subject: [PATCH 01/10] =?UTF-8?q?docs=20:=200122=20=EB=B9=88=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0122/problem-list.md | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 problems/0122/problem-list.md diff --git a/problems/0122/problem-list.md b/problems/0122/problem-list.md deleted file mode 100644 index 0e621fb..0000000 --- a/problems/0122/problem-list.md +++ /dev/null @@ -1,10 +0,0 @@ -### 22일 목 - 배열 - -[문제 01] 배열 정렬하기★ -[문제 02] 배열 제어하기★★ - -[문제 03] 두 개 뽑아서 더하기★ -[문제 04] 모의고사★ -[문제 05] 행렬의 곱셈★ -[문제 06] 실패율★★ -[문제 07] 방문 길이★★ From 3e80d599f4505d946b891e55098c00db7bd43b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= Date: Fri, 23 Jan 2026 16:15:11 +0900 Subject: [PATCH 02/10] =?UTF-8?q?solve=20:=20=EB=AC=B8=EC=A0=9C=208=20~=20?= =?UTF-8?q?13=EB=B2=88=20=EC=A0=95=EB=8B=B5=20=EB=B0=8F=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=209=EB=B2=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\355\231\230\355\225\230\352\270\260.md" | 14 ++++++ ...35\353\247\236\354\266\224\352\270\260.js" | 25 +++++++++++ ...00\355\231\230\355\225\230\352\270\260.js" | 13 ++++++ ...14\354\240\204\355\225\230\352\270\260.js" | 43 +++++++++++++++++++ ...34\352\261\260\355\225\230\352\270\260.js" | 23 ++++++++++ ...74\354\213\235\352\260\200\352\262\251.js" | 27 ++++++++++++ ...21\352\270\260\352\262\214\354\236\204.js" | 37 ++++++++++++++++ 7 files changed, 182 insertions(+) create mode 100644 "solutions/nayoung/0123/[\353\254\270\354\240\23408]\352\264\204\355\230\270\354\247\235\353\247\236\354\266\224\352\270\260.js" create mode 100644 "solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" create mode 100644 "solutions/nayoung/0123/[\353\254\270\354\240\23410]\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" create mode 100644 "solutions/nayoung/0123/[\353\254\270\354\240\23411]\354\247\235\354\247\200\354\226\264\354\240\234\352\261\260\355\225\230\352\270\260.js" create mode 100644 "solutions/nayoung/0123/[\353\254\270\354\240\23412]\354\243\274\354\213\235\352\260\200\352\262\251.js" create mode 100644 "solutions/nayoung/0123/[\353\254\270\354\240\23413]\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204.js" diff --git "a/problems/0123 - \354\212\244\355\203\235/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.md" "b/problems/0123 - \354\212\244\355\203\235/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.md" index e69de29..8770a27 100644 --- "a/problems/0123 - \354\212\244\355\203\235/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.md" +++ "b/problems/0123 - \354\212\244\355\203\235/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.md" @@ -0,0 +1,14 @@ +## 문제 + +10진수를 입력받아 2진수로 변환에 반환하는 solution() 함수를 구현하세요 + +## 제약 조건 + +decimal은 1이상 10억 미만의 자연수 + +# 입출력의 예 + +decimal 반환값 +10 1010 +27 11011 +12345 11000000111001 diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23408]\352\264\204\355\230\270\354\247\235\353\247\236\354\266\224\352\270\260.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23408]\352\264\204\355\230\270\354\247\235\353\247\236\354\266\224\352\270\260.js" new file mode 100644 index 0000000..aa79841 --- /dev/null +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23408]\352\264\204\355\230\270\354\247\235\353\247\236\354\266\224\352\270\260.js" @@ -0,0 +1,25 @@ + +function solution(guarho) { + const stack = []; // 괄호 짝 맞추기 + + for( let char of guarho ){ // 일단 짝이 맞는다고 가정 + if( char === '(' ){ // 짝이 맞지 않는 경우 발견 시 false 반환 + stack.push(char); // 열린 괄호는 스택에 추가 + } else if( char === ')' ){ // 닫힌 괄호인 경우 + if( stack.length === 0 ){ // 스택이 비어있다면 짝이 맞지 않음 + return false; // 닫힌 괄호가 더 많음 + } + stack.pop(); // 짝이 맞는 경우 스택에서 열린 괄호 제거 + } + } + // 모든 문자를 처리한 후 스택이 비어있다면 짝이 맞음 + return stack.length === 0; +} + +// 테스트 케이스 +console.log( solution("()()") ); // true +console.log( solution("(())()") ); // true +console.log( solution(")()(") ); // false +console.log( solution("(()(") ); // false + + diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" new file mode 100644 index 0000000..750346b --- /dev/null +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" @@ -0,0 +1,13 @@ +function solution(section) { + + return decimal.toString(2); +} + +console.log(solution(10)); // "1010" +console.log(solution(27)); // "11011" +console.log(solution(12345)); // "11000000111001" + + +// 10진수를 2진수로 변환하는 함수 +// 10진수: decimal +// 2진수: binary \ No newline at end of file diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23410]\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23410]\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" new file mode 100644 index 0000000..41fc5b7 --- /dev/null +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23410]\352\264\204\355\230\270\355\232\214\354\240\204\355\225\230\352\270\260.js" @@ -0,0 +1,43 @@ +function solution(guarho) { + let count = 0; + const n = guarho.length; // 문자열 길이 + + // 괄호 짝 맞춰주기 + const pair = { + ')': '(', + ']': '[', + '}': '{' + }; + + // 올바른 괄호 문자열인지 검사하는 함수 + function isValid(str) { + let stack = []; + for (let ch of str) { // str 문자열에서 문자 하나씩 꺼내서 ch에 할당 + if (ch === '(' || ch === '[' || ch === '{') { // ch에 할당된 문자와 여는 괄호와 비교 후 + stack.push(ch); // 맞을 경우 스택에 추가 + + } else { // 그 외일 경우 + + if (stack.length === 0) return false; // 스택이 비어있으면 false + if (stack.pop() !== pair[ch]) return false; // pop() 메서드를 호출하여, 그 값이 현재 문자 ch에 해당하는 닫는 괄호의 짝인 여는 괄호와 일치하는지 확인 + } + } + // 모든 문자를 다 처리한 후 스택이 비어있으면 true + return stack.length === 0; + } + + // 회전하면서 검사 + for (let i = 0; i < n; i++) { + + // 문자열 회전 + const rotated = s.slice(i) + s.slice(0, i); // i번째 인덱스부터 끝까지 + 처음부터 i-1번째 인덱스까지 + if (isValid(rotated)) count++; // 올바른 괄호 문자열이면 카운트 증가 + } + + return count; +} + +console.log(solution("[](){}")); // 3 +console.log(solution("}]()[{")); // 2 +console.log(solution("[)()]")); // 0 +console.log(solution("}}}")); // 0 \ No newline at end of file diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23411]\354\247\235\354\247\200\354\226\264\354\240\234\352\261\260\355\225\230\352\270\260.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23411]\354\247\235\354\247\200\354\226\264\354\240\234\352\261\260\355\225\230\352\270\260.js" new file mode 100644 index 0000000..8378574 --- /dev/null +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23411]\354\247\235\354\247\200\354\226\264\354\240\234\352\261\260\355\225\230\352\270\260.js" @@ -0,0 +1,23 @@ +function solution(s) { + // 스택 역할을 할 배열 선언 + let stack = []; + + // 문자열을 앞에서부터 하나씩 순회 + for (let ch of s) { + + // 스택이 비어있지 않고, 스택 맨 위 문자와 현재 문자가 같다면 + if (stack.length > 0 && stack[stack.length - 1] === ch) { + // 짝이 맞으므로 제거 (pop) + stack.pop(); + } else { + // 짝이 아니면 스택에 추가 (push) + stack.push(ch); + } + } + // 모든 문자가 제거되어 스택이 비어 있으면 성공 → 1 + // 남아 있으면 실패 → 0 + return stack.length === 0 ? 1 : 0; +} + +console.log(solution("baabaa")); // 1 +console.log(solution("cdcd")); // 0 \ No newline at end of file diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23412]\354\243\274\354\213\235\352\260\200\352\262\251.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23412]\354\243\274\354\213\235\352\260\200\352\262\251.js" new file mode 100644 index 0000000..17d7a2d --- /dev/null +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23412]\354\243\274\354\213\235\352\260\200\352\262\251.js" @@ -0,0 +1,27 @@ +function solution(prices) { + const n = prices.length; + const answer = Array(n).fill(0); // 결과 배열 + const stack = []; // 인덱스를 저장할 스택 + + // 가격 배열을 처음부터 끝까지 순회 + for (let i = 0; i < n; i++) { + // 현재 가격이 스택 맨 위 가격보다 낮아지면 + while (stack.length > 0 && prices[stack[stack.length - 1]] > prices[i]) { + const prevIndex = stack.pop(); + // 가격이 떨어지지 않은 시간 = 현재 시점 - 이전 시점 + answer[prevIndex] = i - prevIndex; + } + // 현재 인덱스를 스택에 저장 + stack.push(i); + } + + // 끝까지 가격이 떨어지지 않은 경우 처리 + while (stack.length > 0) { + const prevIndex = stack.pop(); + // 끝까지 유지된 시간 = (전체 길이 - 1) - 이전 시점 + answer[prevIndex] = (n - 1) - prevIndex; + } + + return answer; +} +console.log(solution([1, 2, 3, 2, 3])); // [4, 3, 1, 1, 0] \ No newline at end of file diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23413]\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23413]\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204.js" new file mode 100644 index 0000000..4f88cd7 --- /dev/null +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23413]\355\201\254\353\240\210\354\235\270\354\235\270\355\230\225\353\275\221\352\270\260\352\262\214\354\236\204.js" @@ -0,0 +1,37 @@ +function solution(board, moves) { + let answer = 0; // 터진 인형 수 + const stack = []; // 바구니 스택 + + // moves 순회 + for (let move of moves) { + const col = move - 1; // 1-indexed → 0-indexed + + // 해당 컬럼에서 맨 위 인형 찾기 + for (let row = 0; row < board.length; row++) { + if (board[row][col] !== 0) { // 인형 발견 + const doll = board[row][col]; + board[row][col] = 0; // 인형 뽑았으므로 0으로 설정 + + // 바구니 마지막 인형과 같으면 터뜨림 + if (stack.length > 0 && stack[stack.length - 1] === doll) { + stack.pop(); + answer += 2; // 2개 터짐 + } else { + stack.push(doll); // 바구니에 추가 + } + break; // 현재 move 완료, 다음 move 진행 + } + } + } + + return answer; +} + +console.log(solution( + [ [0,0,0,0,0], + [0,0,1,0,3], + [0,2,5,0,1], + [4,2,4,4,2], + [3,5,1,3,1]], + [1,5,3,5,1,2,1,4] +)); // 4 From 01682cd9dd1863e57830e3db1826b23a8a53bb50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= Date: Fri, 23 Jan 2026 16:17:52 +0900 Subject: [PATCH 03/10] =?UTF-8?q?docs=20:=20pull=20request=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/pull_request_template.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/pull_request_template.md b/templates/pull_request_template.md index b4fb5e3..7065b3d 100644 --- a/templates/pull_request_template.md +++ b/templates/pull_request_template.md @@ -1,8 +1,7 @@ ## 🧩 문제 정보 - 플랫폼: (BOJ / 프로그래머스 / LeetCode 등) -- 문제 번호 / 이름: -- 링크: +- 문제 : --- From 7ef0e413828145bf77fe567034c82ad59522ec48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= Date: Fri, 23 Jan 2026 16:40:23 +0900 Subject: [PATCH 04/10] =?UTF-8?q?refactor=20:=20[=EB=AC=B8=EC=A0=9C09]=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" "b/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" index 750346b..2aa49f9 100644 --- "a/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" +++ "b/solutions/nayoung/0123/[\353\254\270\354\240\23409]10\354\247\204\354\210\230\353\245\2742\354\247\204\354\210\230\353\241\234\353\263\200\355\231\230\355\225\230\352\270\260.js" @@ -1,4 +1,4 @@ -function solution(section) { +function solution(decimal) { return decimal.toString(2); } From 469b9a47ec2a9d0666508779e621669aadc45bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= <111120709+KNY1005@users.noreply.github.com> Date: Tue, 27 Jan 2026 16:33:00 +0900 Subject: [PATCH 05/10] =?UTF-8?q?solev=20:=20=EB=AC=B8=EC=A0=9C=2016,=2017?= =?UTF-8?q?=20=EC=A0=95=EB=8B=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\353\212\245\352\260\234\353\260\234.js" | 34 +++++++++++++++++++ ...64\353\223\234\353\255\211\354\271\230.js" | 15 ++++++++ 2 files changed, 49 insertions(+) diff --git "a/solutions/nayoung/0127/[\353\254\270\354\240\23416]\352\270\260\353\212\245\352\260\234\353\260\234.js" "b/solutions/nayoung/0127/[\353\254\270\354\240\23416]\352\270\260\353\212\245\352\260\234\353\260\234.js" index e69de29..aabd4cc 100644 --- "a/solutions/nayoung/0127/[\353\254\270\354\240\23416]\352\270\260\353\212\245\352\260\234\353\260\234.js" +++ "b/solutions/nayoung/0127/[\353\254\270\354\240\23416]\352\270\260\353\212\245\352\260\234\353\260\234.js" @@ -0,0 +1,34 @@ +function solution(progresses, speeds) { + // 각 일자 배열 + const answer = []; + // 배포 일 수 별 배열 + const arr = []; + // 배포일 수 카운트 / 상수 + let count = 1; + + + // 각 기능이 몇일 걸리는지 계산 + for(let i = 0; i < progresses.length; i++){ + // 각 기능별 일자 구하고 반올림 후 배열에 넣어버리기 + answer.push(Math.ceil((100 - progresses[i]) / speeds[i])) + } + + // 배포일자 그룹화 하기 + // answer 배열을 맨처음부터! + let arrInt = answer[0]; + // answer 배열 길이만큼 반복 + for(let j = 1; j < answer.length;j++){ + // 같은 배포일수가 맞는지 확인 + if(answer[j] <= arrInt){ + count++ + // 아니면 count 배열에 넣기 + }else{ + arr.push(count); + arrInt = answer[j]; + count = 1; + } + } + + arr.push(count) + return arr; +} \ No newline at end of file diff --git "a/solutions/nayoung/0127/[\353\254\270\354\240\23417]\354\271\264\353\223\234\353\255\211\354\271\230.js" "b/solutions/nayoung/0127/[\353\254\270\354\240\23417]\354\271\264\353\223\234\353\255\211\354\271\230.js" index e69de29..b5784d7 100644 --- "a/solutions/nayoung/0127/[\353\254\270\354\240\23417]\354\271\264\353\223\234\353\255\211\354\271\230.js" +++ "b/solutions/nayoung/0127/[\353\254\270\354\240\23417]\354\271\264\353\223\234\353\255\211\354\271\230.js" @@ -0,0 +1,15 @@ +function solution(cards1, cards2, goal) { + // goal배열 길이만큼 반복 + for(let i = 0; i < goal.length; i++){ + // cards1 제일 앞 데이터와 goal의 배열과 비교 + if(cards1[0] == goal[i]){ + // 맞으면 cards1 맨 앞 배열 삭제 + cards1.shift() + }else if(cards2[0] == goal[i]){ + cards2.shift() + }else{ + return "No" + } + } + return "Yes"; +} \ No newline at end of file From 6d1ffadadcb24ade29f3c04155db137de7fad318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= <111120709+KNY1005@users.noreply.github.com> Date: Tue, 27 Jan 2026 16:35:06 +0900 Subject: [PATCH 06/10] =?UTF-8?q?solve=20:=2015=EB=B2=88=20=ED=91=B8?= =?UTF-8?q?=EB=8A=94=20=EC=A4=91..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\270\355\221\270\354\212\244\353\254\270\354\240\234.js" | 4 ++++ 1 file changed, 4 insertions(+) diff --git "a/solutions/nayoung/0127/[\353\254\270\354\240\23415]\354\232\224\354\204\270\355\221\270\354\212\244\353\254\270\354\240\234.js" "b/solutions/nayoung/0127/[\353\254\270\354\240\23415]\354\232\224\354\204\270\355\221\270\354\212\244\353\254\270\354\240\234.js" index e69de29..9ff5fb0 100644 --- "a/solutions/nayoung/0127/[\353\254\270\354\240\23415]\354\232\224\354\204\270\355\221\270\354\212\244\353\254\270\354\240\234.js" +++ "b/solutions/nayoung/0127/[\353\254\270\354\240\23415]\354\232\224\354\204\270\355\221\270\354\212\244\353\254\270\354\240\234.js" @@ -0,0 +1,4 @@ +const fs = require('fs'); +const input = fs.readFileSync("/dev/stdin").toString().trim().split(" "); + +// 푸는 중.. \ No newline at end of file From 5cd31b3f18a7acbb7c3eef166ff9d2c4d13c6d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= <111120709+KNY1005@users.noreply.github.com> Date: Wed, 28 Jan 2026 02:38:42 +0900 Subject: [PATCH 07/10] =?UTF-8?q?docs=20:=200128=20=ED=95=B4=EC=8B=9C(1)?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EC=97=85=EB=A1=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...40\354\235\270\355\226\211\354\202\254.md" | 57 +++++++++ ...22\353\247\214\353\223\244\352\270\260.md" | 30 +++++ ...30\353\247\214\353\223\244\352\270\260.md" | 22 ++++ ...73\355\225\234\354\204\240\354\210\230.md" | 60 ++++++++++ ...35\353\247\220\354\236\207\352\270\260.md" | 108 ++++++++++++++++++ ...10\355\230\270\353\252\251\353\241\235.md" | 56 +++++++++ 6 files changed, 333 insertions(+) create mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" create mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.md" create mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.md" create mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.md" create mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.md" create mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.md" diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" new file mode 100644 index 0000000..1b0f599 --- /dev/null +++ "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" @@ -0,0 +1,57 @@ +[프로그래머스 - 할인행사](https://school.programmers.co.kr/learn/courses/30/lessons/131127) + +## 문제 설명 +XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다. XYZ 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다. 할인하는 제품은 하루에 하나씩만 구매할 수 있습니다. 알뜰한 정현이는 자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려 합니다. + +예를 들어, 정현이가 원하는 제품이 바나나 3개, 사과 2개, 쌀 2개, 돼지고기 2개, 냄비 1개이며, XYZ 마트에서 14일간 회원을 대상으로 할인하는 제품이 날짜 순서대로 치킨, 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과, 바나나인 경우에 대해 알아봅시다. 첫째 날부터 열흘 간에는 냄비가 할인하지 않기 때문에 첫째 날에는 회원가입을 하지 않습니다. 둘째 날부터 열흘 간에는 바나나를 원하는 만큼 할인구매할 수 없기 때문에 둘째 날에도 회원가입을 하지 않습니다. 셋째 날, 넷째 날, 다섯째 날부터 각각 열흘은 원하는 제품과 수량이 일치하기 때문에 셋 중 하루에 회원가입을 하려 합니다. + +정현이가 원하는 제품을 나타내는 문자열 배열 want와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number, XYZ 마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return 하는 solution 함수를 완성하시오. 가능한 날이 없으면 0을 return 합니다. + +## 제한사항 +- 1 ≤ want의 길이 = number의 길이 ≤ 10 + - 1 ≤ number의 원소 ≤ 10 + - number[i]는 want[i]의 수량을 의미하며, number의 원소의 합은 10입니다. +- 10 ≤ discount의 길이 ≤ 100,000 +- want와 discount의 원소들은 알파벳 소문자로 이루어진 문자열입니다. + - 1 ≤ want의 원소의 길이, discount의 원소의 길이 ≤ 12 + +## 입출력 예 +want +["banana", "apple", "rice", "pork", "pot"] + +number +[3, 2, 2, 2, 1] + +discount +["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] + +result +3 + +------------------------------------------------ + +want +["apple"] + +number +[10] + +discount +["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"] + +result +0 + +## 입출력 예 설명 +## 입출력 예 #1 +문제 예시와 같습니다. + +## 입출력 예 #2 +사과가 할인하는 날이 없으므로 0을 return 합니다. + + +## solution.js +function solution(want, number, discount) { + var answer = 0; + return answer; +} \ No newline at end of file diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.md" new file mode 100644 index 0000000..bd97024 --- /dev/null +++ "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.md" @@ -0,0 +1,30 @@ +[자체문제] + +n개의 양의 정수로 이루어진 리스트 arr와 정수 target이 주어졌을 떄 이중에서 합이 target인 두 수가 arr에 있는지 찾고, +있으면 true, 없으면 false를 반환하는 solution()함수를 작성하시오. + +## 제약 조건 +- n은 2이상 10,000 이하의 자연수 입니다. +- arr의 각 원소는 1이상 10,000 이하의 자연수 입니다. +- arr의 원소 중 중복되는 원소는 없습니다. +- target은 1이상 20,000 이하의 자연수입니다. + +## 입출력의 예 +arr +[1, 2, 3, 4, 8] + +target +6 + +return +True + +--------------- +arr +[2, 3, 5, 9] + +target +10 + +return +false diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.md" new file mode 100644 index 0000000..37b97ce --- /dev/null +++ "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.md" @@ -0,0 +1,22 @@ +[자체문제] + +문자열 리스트 stringList와 쿼리 리스트 qurryList가 있을 때 각 쿼리 리스트에 있는 문자열이 stringList의 문자열 리스트에 있는지 여부를 확인해야 합니다. +문자열이 있으면 true, 없으면 false가 됩니다. 각 문자열에 대해서 문자열의 존재 여부를 리스트 형태로 반환하는 solution()함수를 작성해주세요 + +## 제약 조건 +- 입력 문자열은 영어 소문자로만 이루어져 있습니다. +- 문자열의 최대 길이는 10^6입니다. +- 해시 충돌은 없습니다. +- 아래와 같은 문자열 해싱 방법을 활용해서 함수를 구현하세요. +- 다음 식에서 p는 31, m은 1,000,000,007fh gkqslek + - hash(s) =(s[0]+s[1]*p+s[2]*p^2 ........s[n-1]*p^n-1) mod m + +## 입출력의 예 +stringList +["apple", "banana", "charry"] + +queryList +["banana", "kiwi", "melon", "apple"] + +return +[True, false, false, True] diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.md" new file mode 100644 index 0000000..c5f1634 --- /dev/null +++ "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.md" @@ -0,0 +1,60 @@ +[프로그래머스 - 완주하지 못한 선수](https://school.programmers.co.kr/learn/courses/30/lessons/42576) + +## 문제 설명 +수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. + +마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. + +## 제한사항 +- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. +- completion의 길이는 participant의 길이보다 1 작습니다. +- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. +- 참가자 중에는 동명이인이 있을 수 있습니다. + +## 입출력 예 +participant +["leo", "kiki", "eden"] + +completion +["eden", "kiki"] + +return +"leo" + +---------------------------- + +participant +["marina", "josipa", "nikola", "vinko", "filipa"] + +completion +["josipa", "filipa", "marina", "nikola"] + +return +"vinko" + +---------------------------- + +participant +["mislav", "stanko", "mislav", "ana"] + +completion +["stanko", "ana", "mislav"] + +return +"mislav" + +## 입출력 예 설명 +## 예제 #1 +"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다. + +## 예제 #2 +"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다. + +## 예제 #3 +"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다. + +## solution.js +function solution(participant, completion) { + var answer = ''; + return answer; +} \ No newline at end of file diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.md" new file mode 100644 index 0000000..f13689f --- /dev/null +++ "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.md" @@ -0,0 +1,108 @@ +[프로그래머스 - 영어 끝말잇기](https://school.programmers.co.kr/learn/courses/30/lessons/12981) + +## 문제 설명 +1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. + +1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. +2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. +3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. +4. 이전에 등장했던 단어는 사용할 수 없습니다. +5. 한 글자인 단어는 인정되지 않습니다. +6. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. + +tank → kick → know → wheel → land → dream → mother → robot → tank + +위 끝말잇기는 다음과 같이 진행됩니다. + +- 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. +- 2번 사람이 자신의 첫 번째 차례에 kick을 말합니다. +- 3번 사람이 자신의 첫 번째 차례에 know를 말합니다. +- 1번 사람이 자신의 두 번째 차례에 wheel을 말합니다. +- (계속 진행) + +끝말잇기를 계속 진행해 나가다 보면, 3번 사람이 자신의 세 번째 차례에 말한 tank 라는 단어는 이전에 등장했던 단어이므로 탈락하게 됩니다. + +사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요. + +## 제한 사항 +- 끝말잇기에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다. +- words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 n 이상 100 이하입니다. +- 단어의 길이는 2 이상 50 이하입니다. +- 모든 단어는 알파벳 소문자로만 이루어져 있습니다. +- 끝말잇기에 사용되는 단어의 뜻(의미)은 신경 쓰지 않으셔도 됩니다. +- 정답은 [ 번호, 차례 ] 형태로 return 해주세요. +- 만약 주어진 단어들로 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요. + +## 입출력 예 +n +3 + +words +["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] + +result +[3,3] + +------------------------------------------------- + +n +5 + +words +["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] + +result +[0,0] + +------------------------------------------------- + +n +2 + +words +["hello", "one", "even", "never", "now", "world", "draw"] + +result +[1,3] + + +## 입출력 예 설명 +## 입출력 예 #1 +3명의 사람이 끝말잇기에 참여하고 있습니다. + +1번 사람 : tank, wheel, mother +2번 사람 : kick, land, robot +3번 사람 : know, dream, tank + +와 같은 순서로 말을 하게 되며, 3번 사람이 자신의 세 번째 차례에 말한 tank라는 단어가 1번 사람이 자신의 첫 번째 차례에 말한 tank와 같으므로 3번 사람이 자신의 세 번째 차례로 말을 할 때 처음 탈락자가 나오게 됩니다. + +## 입출력 예 #2 +5명의 사람이 끝말잇기에 참여하고 있습니다. + +1번 사람 : hello, recognize, gather +2번 사람 : observe, encourage, refer +3번 사람 : effect, ensure, reference +4번 사람 : take, establish, estimate +5번 사람 : either, hang, executive + +와 같은 순서로 말을 하게 되며, 이 경우는 주어진 단어로만으로는 탈락자가 발생하지 않습니다. 따라서 [0, 0]을 return하면 됩니다. + +## 입출력 예 #3 +2명의 사람이 끝말잇기에 참여하고 있습니다. + +1번 사람 : hello, even, now, draw +2번 사람 : one, never, world + +와 같은 순서로 말을 하게 되며, 1번 사람이 자신의 세 번째 차례에 'r'로 시작하는 단어 대신, n으로 시작하는 now를 말했기 때문에 이때 처음 탈락자가 나오게 됩니다. + + +## solution.js + +function solution(n, words) { + var answer = []; + + // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다. + console.log('Hello Javascript') + + return answer; +} \ No newline at end of file diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.md" new file mode 100644 index 0000000..8e78442 --- /dev/null +++ "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.md" @@ -0,0 +1,56 @@ +[프로그래머스 - 전화번호목록](https://school.programmers.co.kr/learn/courses/30/lessons/42577) + +## 문제 설명 +전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. +전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. + +- 구조대 : 119 +- 박준영 : 97 674 223 +- 지영석 : 11 9552 4421 + +전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. + +## 제한 사항 +- phone_book의 길이는 1 이상 1,000,000 이하입니다. +- 각 전화번호의 길이는 1 이상 20 이하입니다. +- 같은 전화번호가 중복해서 들어있지 않습니다. + +## 입출력 예제 +phone_book +["119", "97674223", "1195524421"] + +return +false + +------------------------------------ + +phone_book +["123","456","789"] + +return +true + +------------------------------------ + +phone_book +["12","123","1235","567","88"] + +return +false + +## 입출력 예 설명 +## 입출력 예 #1 +앞에서 설명한 예와 같습니다. + +## 입출력 예 #2 +한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다. + +## 입출력 예 #3 +첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다. + + +## solution.js +function solution(phone_book) { + var answer = true; + return answer; +} \ No newline at end of file From e4d68f8cd5919583357b0431b30024993d749c6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= <111120709+KNY1005@users.noreply.github.com> Date: Wed, 28 Jan 2026 16:34:37 +0900 Subject: [PATCH 08/10] =?UTF-8?q?solve=20:=20=20=EB=AC=B8=EC=A0=9C=2018,?= =?UTF-8?q?=2019,=2020=20=EC=A0=95=EB=8B=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...22\353\247\214\353\223\244\352\270\260.js" | 21 +++++++++++++++ ...30\353\247\214\353\223\244\352\270\260.js" | 26 +++++++++++++++++++ ...73\355\225\234\354\204\240\354\210\230.js" | 15 +++++++++++ 3 files changed, 62 insertions(+) create mode 100644 "solutions/nayoung/0128/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.js" create mode 100644 "solutions/nayoung/0128/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.js" create mode 100644 "solutions/nayoung/0128/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.js" diff --git "a/solutions/nayoung/0128/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.js" "b/solutions/nayoung/0128/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..79a9c36 --- /dev/null +++ "b/solutions/nayoung/0128/[\353\254\270\354\240\23418]\353\221\220\352\260\234\354\235\230\354\210\230\353\241\234\355\212\271\354\240\225\352\260\222\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,21 @@ + +// 매개변수 arr과 target을 입력받기 +function solution(arr, target) { + + //arr의 배열의 길이만큼 2번 반복 + for (let i = 0; i < arr.length; i++) { + // arr의 i번째 이후의 배열 길이만큼 반복 / 중복 방지 + for (let j = i + 1; j < arr.length; j++) { + + // 두 수의 합이 target과 같으면 True 반환 + if (arr[i] + arr[j] === target) { + return "True"; + } + } + } + // 합이 target인 두 수가 없으면 false 반환 + return "false"; +} + +console.log(solution([1, 2, 3, 4, 8], 6)); // True +console.log(solution([2, 3, 5, 9], 10)); // false \ No newline at end of file diff --git "a/solutions/nayoung/0128/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.js" "b/solutions/nayoung/0128/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..cec65cc --- /dev/null +++ "b/solutions/nayoung/0128/[\353\254\270\354\240\23419]\353\254\270\354\236\220\354\227\264\355\225\264\354\213\261\354\235\204\354\235\264\354\232\251\355\225\234\352\262\200\354\203\211\355\225\250\354\210\230\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,26 @@ +function solution(stringList, qurryList) { + // 빈 배열 생성 + const answer = []; + + // stringList와 qurryList의 길이만큼 2중 반복문 실행 + for (let i = 0; i < qurryList.length; i++) { + + for (let j = 0; j < stringList.length; j++) { + + // 두 문자열이 같으면 True, 다르면 false를 answer배열에 추가 + if (stringList[j] == qurryList[i]) { + answer.push("True"); + // 같으면 내부 반복문 탈출 + break; + } + } + // 내부 반복문에서 break되지 않고 끝까지 돌았을 때 false 추가 + if (answer.length - 1 < i) { + answer.push("false"); + } + } + return answer; +} + +console.log(solution(["apple", "banana", "charry"], ["banana", "kiwi", "melon", "apple"])); +// [True, false, false, True] \ No newline at end of file diff --git "a/solutions/nayoung/0128/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.js" "b/solutions/nayoung/0128/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.js" new file mode 100644 index 0000000..159d988 --- /dev/null +++ "b/solutions/nayoung/0128/[\353\254\270\354\240\23420]\354\231\204\354\243\274\355\225\230\354\247\200\353\252\273\355\225\234\354\204\240\354\210\230.js" @@ -0,0 +1,15 @@ +function solution(participant, completion) { + // 정렬 후 비교 + participant.sort() + completion.sort() + + // 완주하지 못한 선수 찾기 + for (let i = 0; i < completion.length; i++) { + // participant와 completion이 다르면 해당 선수 반환 + if (participant[i] != completion[i]) { + return participant[i]; + } + } + // 마지막 선수 반환 + return participant[participant.length - 1]; +} From d75f2328dfa995722060520e9736c8ccb5ca80b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= <111120709+KNY1005@users.noreply.github.com> Date: Fri, 30 Jan 2026 15:55:31 +0900 Subject: [PATCH 09/10] =?UTF-8?q?solve=20:=2021~23=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=A0=95=EB=8B=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...40\354\235\270\355\226\211\354\202\254.md" | 57 ----------- ...35\353\247\220\354\236\207\352\270\260.js" | 43 ++++++++ ...10\355\230\270\353\252\251\353\241\235.js" | 19 ++++ ...40\354\235\270\355\226\211\354\202\254.js" | 99 +++++++++++++++++++ 4 files changed, 161 insertions(+), 57 deletions(-) delete mode 100644 "problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" create mode 100644 "solutions/nayoung/0128/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" create mode 100644 "solutions/nayoung/0128/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.js" create mode 100644 "solutions/nayoung/0128/[\353\254\270\354\240\23423]\355\225\240\354\235\270\355\226\211\354\202\254.js" diff --git "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" "b/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" deleted file mode 100644 index 1b0f599..0000000 --- "a/problems/0128 - \355\225\264\354\213\234(1)/[\353\254\270\354\240\234 23]\355\225\240\354\235\270\355\226\211\354\202\254.md" +++ /dev/null @@ -1,57 +0,0 @@ -[프로그래머스 - 할인행사](https://school.programmers.co.kr/learn/courses/30/lessons/131127) - -## 문제 설명 -XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다. XYZ 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다. 할인하는 제품은 하루에 하나씩만 구매할 수 있습니다. 알뜰한 정현이는 자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려 합니다. - -예를 들어, 정현이가 원하는 제품이 바나나 3개, 사과 2개, 쌀 2개, 돼지고기 2개, 냄비 1개이며, XYZ 마트에서 14일간 회원을 대상으로 할인하는 제품이 날짜 순서대로 치킨, 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과, 바나나인 경우에 대해 알아봅시다. 첫째 날부터 열흘 간에는 냄비가 할인하지 않기 때문에 첫째 날에는 회원가입을 하지 않습니다. 둘째 날부터 열흘 간에는 바나나를 원하는 만큼 할인구매할 수 없기 때문에 둘째 날에도 회원가입을 하지 않습니다. 셋째 날, 넷째 날, 다섯째 날부터 각각 열흘은 원하는 제품과 수량이 일치하기 때문에 셋 중 하루에 회원가입을 하려 합니다. - -정현이가 원하는 제품을 나타내는 문자열 배열 want와 정현이가 원하는 제품의 수량을 나타내는 정수 배열 number, XYZ 마트에서 할인하는 제품을 나타내는 문자열 배열 discount가 주어졌을 때, 회원등록시 정현이가 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return 하는 solution 함수를 완성하시오. 가능한 날이 없으면 0을 return 합니다. - -## 제한사항 -- 1 ≤ want의 길이 = number의 길이 ≤ 10 - - 1 ≤ number의 원소 ≤ 10 - - number[i]는 want[i]의 수량을 의미하며, number의 원소의 합은 10입니다. -- 10 ≤ discount의 길이 ≤ 100,000 -- want와 discount의 원소들은 알파벳 소문자로 이루어진 문자열입니다. - - 1 ≤ want의 원소의 길이, discount의 원소의 길이 ≤ 12 - -## 입출력 예 -want -["banana", "apple", "rice", "pork", "pot"] - -number -[3, 2, 2, 2, 1] - -discount -["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] - -result -3 - ------------------------------------------------- - -want -["apple"] - -number -[10] - -discount -["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"] - -result -0 - -## 입출력 예 설명 -## 입출력 예 #1 -문제 예시와 같습니다. - -## 입출력 예 #2 -사과가 할인하는 날이 없으므로 0을 return 합니다. - - -## solution.js -function solution(want, number, discount) { - var answer = 0; - return answer; -} \ No newline at end of file diff --git "a/solutions/nayoung/0128/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" "b/solutions/nayoung/0128/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" new file mode 100644 index 0000000..2aa63b2 --- /dev/null +++ "b/solutions/nayoung/0128/[\353\254\270\354\240\23421]\354\230\201\354\226\264\353\201\235\353\247\220\354\236\207\352\270\260.js" @@ -0,0 +1,43 @@ +function solution(n, words) { + // 탈락자 번호와 차례를 저장할 배열 + const answer = []; + + // 단어 배열 순회 + for (let i = 0; i < words.length; i++) { + + // 현재 차례의 단어 + const word = words[i]; + + // 한 글자인 단어는 인정되지 않으므로 탈락 + if (word.length < 2) { + + // 탈락한 사람 번호와 차례 반환 + return [(i % n) + 1, Math.floor(i / n) + 1]; + } + + // 첫 단어가 아니라면, 이전 단어의 끝 글자와 현재 단어의 첫 글자 비교 + if (i > 0) { + // 이전 단어 + const prev = words[i - 1]; + + // 이전 단어의 끝 글자와 현재 단어의 첫 글자 비교 + if (prev[prev.length - 1] !== word[0]) { + + // 끝말잇기 규칙 위반 시 탈락 + return [(i % n) + 1, Math.floor(i / n) + 1]; + } + } + + // 이미 사용된 단어인지 확인 + if (answer.indexOf(word) !== -1) { + // 중복 단어 사용 시 탈락 + return [(i % n) + 1, Math.floor(i / n) + 1]; + } + + // 현재 단어를 사용된 단어 목록에 추가 + answer.push(word); + } + + // 모든 단어를 문제 없이 사용했다면 탈락자가 없으므로 [0, 0] 반환 + return [0, 0]; +} diff --git "a/solutions/nayoung/0128/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.js" "b/solutions/nayoung/0128/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.js" new file mode 100644 index 0000000..68fb82d --- /dev/null +++ "b/solutions/nayoung/0128/[\353\254\270\354\240\23422]\354\240\204\355\231\224\353\262\210\355\230\270\353\252\251\353\241\235.js" @@ -0,0 +1,19 @@ +function solution(phone_book) { + // 전화번호를 사전순으로 정렬 + phone_book.sort(); + + // 전화번호 배열 길이만큼 순회 + for (let i = 0; i < phone_book.length - 1; i++) { + + // 인접한 번호끼리 접두어 관계인지 확인 + if (phone_book[i + 1].startsWith(phone_book[i])) { + // 있으면 false + return false; + } + } + // 없으면 ture + return true; +} + +// startWith() +// 문자열이 특정 문자열로 시작하는지 확인하는 메서드 \ No newline at end of file diff --git "a/solutions/nayoung/0128/[\353\254\270\354\240\23423]\355\225\240\354\235\270\355\226\211\354\202\254.js" "b/solutions/nayoung/0128/[\353\254\270\354\240\23423]\355\225\240\354\235\270\355\226\211\354\202\254.js" new file mode 100644 index 0000000..d545f8a --- /dev/null +++ "b/solutions/nayoung/0128/[\353\254\270\354\240\23423]\355\225\240\354\235\270\355\226\211\354\202\254.js" @@ -0,0 +1,99 @@ +function solution(want, number, discount) { + let answer = 0; + // 사용한 상품을 저장할 배열 + const used = []; + + // 원하는 상품을 배열 형태로 풀어서 저장 + for (let i = 0; i < want.length; i++) { + // 원하는 상품의 수량만큼 배열에 추가 + for (let j = 0; j < number[i]; j++) { + used.push(want[i]); + } + } + + // 10일씩 슬라이딩 윈도우 + for (let i = 0; i <= discount.length - 10; i++) { + const temp = used.slice(); + let match = true; + + // 현재 10일간 할인 목록 검사 + for (let j = i; j < i + 10; j++) { + const idx = temp.indexOf(discount[j]); + + // 원하는 상품이 없거나 수량 초과일 경우 탈락 + if (idx === -1) { + match = false; + // 탈락하면 반복문 비상상탈출 + break; + + } else { + // 사용한 상품 제거 + temp.splice(idx, 1); + } + // 매칭되면 카운트 증가 + if (match) answer++; + } + + return answer; + } +} + +//--------------------------------------------- +// 슬라이딩 윈도우 + Map 활용 + +function solution(want, number, discount) { + let answer = 0; + + // 원하는 상품과 수량을 Map으로 저장 + const wantMap = new Map(); + for (let i = 0; i < want.length; i++) { + wantMap.set(want[i], number[i]); + } + + // 처음 10일간 할인 상품 개수 계산 + const currentMap = new Map(); + for (let i = 0; i < 10; i++) { + currentMap.set(discount[i], (currentMap.get(discount[i]) || 0) + 1); + } + + // 두 Map이 같은지 확인하는 함수 + function isSame() { + for (const [key, value] of wantMap) { + if (currentMap.get(key) !== value) return false; + } + return true; + } + + // 첫 구간 검사 + if (isSame()) answer++; + + // 슬라이딩 윈도우 적용 + for (let i = 10; i < discount.length; i++) { + const removeItem = discount[i - 10]; + const removeCount = currentMap.get(removeItem) - 1; + + if (removeCount === 0) currentMap.delete(removeItem); + else currentMap.set(removeItem, removeCount); + + const addItem = discount[i]; + currentMap.set(addItem, (currentMap.get(addItem) || 0) + 1); + + if (isSame()) answer++; + } + + // 최종 결과 반환 + return answer; +} + +// 슬라이딩 윈도우 +// 한 번에 한 칸씩 이동하며 데이터를 처리하는 방법 +// 슬라이딩 윈도우를 사용하면 시간 복잡도를 줄일 수 있음 + +// set 메서드 +// 중복을 제거하는 데 사용되며, 중복된 값을 제거하고 유니크한 값만 남김 + +// Map 메서드 +// 키와 값의 쌍을 저장하는 자료구조 +// 키를 사용하여 값을 조회할 수 있음 +// 키는 중복될 수 없음 +// 값은 중복될 수 있음 \ No newline at end of file From 901b748a3ab38b417fbee07e3a05123ade587230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=82=98=EC=98=81?= <111120709+KNY1005@users.noreply.github.com> Date: Fri, 6 Feb 2026 16:58:35 +0900 Subject: [PATCH 10/10] =?UTF-8?q?solve=20:=20=EB=AC=B8=EC=A0=9C=2028=20?= =?UTF-8?q?=EC=A0=95=EB=8B=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...70\353\246\254\354\210\234\355\232\214.js" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "solutions/nayoung/0130/[\353\254\270\354\240\23428]\355\212\270\353\246\254\354\210\234\355\232\214.js" diff --git "a/solutions/nayoung/0130/[\353\254\270\354\240\23428]\355\212\270\353\246\254\354\210\234\355\232\214.js" "b/solutions/nayoung/0130/[\353\254\270\354\240\23428]\355\212\270\353\246\254\354\210\234\355\232\214.js" new file mode 100644 index 0000000..a2f0fcd --- /dev/null +++ "b/solutions/nayoung/0130/[\353\254\270\354\240\23428]\355\212\270\353\246\254\354\210\234\355\232\214.js" @@ -0,0 +1,81 @@ +const fs = require("fs"); +const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); + +//트리구조 정의 +class Node { + constructor(value) { + this.value = value; + this.left = null; + this.right = null; + } +} + +// 트리 생성 +const nodes = new Map(); + +// 입력 반복 처리 +// 트리 생성 (부모-자식 연결) +input.slice(1).forEach(line => { + const [value, left, right] = line.split(" "); + + if (!nodes.has(value)) { + nodes.set(value, new Node(value)); + } + const parent = nodes.get(value); + + if (left !== ".") { + if (!nodes.has(left)) { + nodes.set(left, new Node(left)); + } + parent.left = nodes.get(left); + } + + if (right !== ".") { + if (!nodes.has(right)) { + nodes.set(right, new Node(right)); + } + parent.right = nodes.get(right); + } +}); + +// 루트 +const root = nodes.get(input[1].split(" ")[0]); + +// 전위순회 +function preOrder (node, preResult){ + if(!node)return; + preResult.push(node.value) + preOrder(node.left, preResult); + preOrder(node.right, preResult); + return preResult +} + +// 중위순회 +function inOrder (node, inResult){ + if(!node)return; + inOrder(node.left, inResult); + inResult.push(node.value) + inOrder(node.right, inResult); + return inResult +} + +// 후위순회 +function postOrder (node, postResult){ + if(!node)return; + postOrder(node.left, postResult); + postOrder(node.right, postResult); + postResult.push(node.value) + return postResult +} + +const preResult = preOrder(root, []); +const inResult = inOrder(root, []); +const postResult = postOrder(root, []); + +// 전위순회 출력 +console.log(preResult.join("")); +// 중위순회 출력 +console.log(inResult.join("")); +// 후위순회 출력 +console.log(postResult.join("")); +