From 5193193da229815d7ef9f74a43f597e78064d482 Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 10:00:14 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=F0=9F=92=A1=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2012949=20-=20=ED=96=89=EB=A0=AC?= =?UTF-8?q?=EC=9D=98=20=EA=B3=B1=EC=85=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\235\230_\352\263\261\354\205\210.js" | 30 +++++++++++++++++++ Programmers/README.md | 1 + 2 files changed, 31 insertions(+) create mode 100644 "Programmers/Level2/12949_\355\226\211\353\240\254\354\235\230_\352\263\261\354\205\210.js" diff --git "a/Programmers/Level2/12949_\355\226\211\353\240\254\354\235\230_\352\263\261\354\205\210.js" "b/Programmers/Level2/12949_\355\226\211\353\240\254\354\235\230_\352\263\261\354\205\210.js" new file mode 100644 index 0000000..50c9524 --- /dev/null +++ "b/Programmers/Level2/12949_\355\226\211\353\240\254\354\235\230_\352\263\261\354\205\210.js" @@ -0,0 +1,30 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 12949 - 행렬의 곱셈 +레벨 : Level 2 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12949 +*/ + +function solution(arr1, arr2) { + const row1 = arr1.length; + const col1 = arr1[0].length; + const row2 = arr2.length; + const col2 = arr2[0].length; + + // 결과를 저장할 배열 초기화 (row1 * col2) + const answer = []; + for (let cnt = 0; cnt < row1; cnt++) { + answer.push(new Array(col2).fill(0)); + } + + // 곱셈 시작 + for (let i = 0; i < row1; i++) { + for (let j = 0; j < col2; j++) { + for (let k = 0; k < col1; k++) { + answer[i][j] += arr1[i][k] * arr2[k][j]; + } + } + } + + return answer; +} diff --git a/Programmers/README.md b/Programmers/README.md index 3938bd8..21bdd88 100644 --- a/Programmers/README.md +++ b/Programmers/README.md @@ -11,6 +11,7 @@ | 12924 | 숫자의 표현 | [12924_숫자의_표현.js](Level2/12924_숫자의_표현.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12924) | | 12939 | 최댓값과 최솟값 | [12939_최댓값과_최솟값.js](Level2/12939_최댓값과_최솟값.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12939) | | 12941 | 최솟값 만들기 | [12941_최솟값_만들기.js](Level2/12941_최솟값_만들기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12941) | +| 12949 | 행렬의 곱셈 | [12949_행렬의_곱셈.js](Level2/12949_행렬의_곱셈.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12949) | | 12987 | 숫자 게임 | [12987_숫자_게임.js](Level3/12987_숫자_게임.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12987) | | 17677 | [1차] 뉴스 클러스터링 | [17677_[1차]_뉴스_클러스터링.js](Level2/17677_[1차]_뉴스_클러스터링.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/17677) | | 17678 | [1차] 셔틀버스 | [17678_[1차]_셔틀버스.js](Level3/17678_[1차]_셔틀버스.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/17678) | From 5057a9a12fec1a556690f8f6d368fc191f3288ac Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 11:09:56 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=92=A1=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2042889=20-=20=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=EC=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...9_\354\213\244\355\214\250\354\234\250.js" | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git "a/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" "b/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" index 69275ed..76eed40 100644 --- "a/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" +++ "b/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" @@ -1,4 +1,43 @@ -function solution(N, stages) { +/* +⭐️ 문제 정보 ⭐️ +문제 : 42889 - 실패율 +레벨 : Level 1 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42889 +*/ + +// ANCHOR 2025.10.02 풀이 +function solution2(N, stages) { + // k번째 스테이지에 도전중인 플레이어를 구하기 + // N + 2 : 스테이지 번호가 1부터 시작 + 모두 통과한 플레이어도 커버하기 위함 + const stagePlayers = new Array(N + 2).fill(0); + for (const stage of stages) { + stagePlayers[stage]++; + } + + // 실패율 구하기 (여전히 도전중인 플레이어 / 도달한 적이 있는 플레이어) + const fails = {}; // 실패율 + let totalPlayers = stages.length; // 전체 플레이어의 수 + + for (let k = 1; k <= N; k++) { + if (stagePlayers[k] === 0) { + // 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0으로 정의한다. + fails[k] = 0; + } else { + fails[k] = stagePlayers[k] / totalPlayers; + totalPlayers -= stagePlayers[k]; + } + } + + // fails 정렬하기 + const answer = Object.entries(fails) + .sort(([_a, a], [_b, b]) => b - a) + .map(([idx, value]) => Number(idx)); + + return answer; +} + +// ANCHOR 2024.02.28 풀이 +function solution1(N, stages) { // 각 스테이지에 도달한 유저 const stageArray = new Array(N).fill(0); // 각 스테이지에 현재 도전중인 유저 = 스테이지에 도달했으나 클리어하지 못한 유저 From 3f467ed49ce60e121f8f59a9b17ad1f342f30361 Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 15:08:21 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=92=A1=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2049994=20-=20=EB=B0=A9=EB=AC=B8=20?= =?UTF-8?q?=EA=B8=B8=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\353\254\270_\352\270\270\354\235\264.js" | 61 +++++++++++++++++++ Programmers/README.md | 3 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 "Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" diff --git "a/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" "b/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" new file mode 100644 index 0000000..a14be04 --- /dev/null +++ "b/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" @@ -0,0 +1,61 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 49994 - 방문 길이 +레벨 : Level 2 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/49994 +*/ + +function isValidPos(pos) { + const { x, y } = pos; + return x >= -5 && x <= 5 && y >= -5 && y <= 5; +} + +// 명령어에 따라 업데이트 된 위치를 반환하는 함수 +function move(dir, pos) { + const { x, y } = pos; + let npos; + switch (dir) { + case "U": + nPos = { x, y: y - 1 }; + if (isValidPos(nPos)) return nPos; + return null; + case "D": + nPos = { x, y: y + 1 }; + if (isValidPos(nPos)) return nPos; + return null; + case "R": + nPos = { x: x + 1, y }; + if (isValidPos(nPos)) return nPos; + return null; + case "L": + nPos = { x: x - 1, y }; + if (isValidPos(nPos)) return nPos; + return null; + default: + return null; + } +} + +function solution(dirs) { + let answer = 0; + const visited = new Set(); // 방문한 from-to 경로를 저장하는 set + let pos = { x: 0, y: 0 }; + + for (const dir of dirs) { + const newPos = move(dir, pos); + if (!newPos) continue; + + const path = `${pos.x},${pos.y}-${newPos.x},${newPos.y}`; + const oppositePath = `${newPos.x},${newPos.y}-${pos.x},${pos.y}`; + + if (!visited.has(path)) { + visited.add(path); + visited.add(oppositePath); + answer++; + } + + pos = newPos; + } + + return answer; +} diff --git a/Programmers/README.md b/Programmers/README.md index 21bdd88..2eaf23d 100644 --- a/Programmers/README.md +++ b/Programmers/README.md @@ -21,8 +21,9 @@ | 42584 | 주식가격 | [42584_주식가격.js](Level2/42584_주식가격.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42584) | | 42840 | 모의고사 | [42840_모의고사.js](Level1/42840_모의고사.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42840) | | 42888 | 오픈채팅방 | [42888_오픈채팅방.js](Level2/42888_오픈채팅방.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42888) | -| 42889 | 실패율 | [42889_실패율.js](Level1/42889_실패율.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42889) | +| 42889 | 실패율 | [42889_실패율.js](Level1/42889_실패율.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42889) | | 49993 | 스킬트리 | [49993_스킬트리.js](Level2/49993_스킬트리.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/49993) | +| 49994 | 방문 길이 | [49994_방문_길이.js](Level2/49994_방문_길이.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/49994) | | 60057 | 문자열 압축 | [60057_문자열_압축.js](Level2/60057_문자열_압축.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/60057) | | 60062 | 외벽 점검 | [60062_외벽_점검.js](60062_외벽_점검.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/60062) | | 64061 | 크레인 인형뽑기 게임 | [64061_크레인_인형뽑기_게임.js](Level1/64061_크레인_인형뽑기_게임.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/64061) | From 5ba210f3f242ad0adc382dec0666701c87967703 Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 16:27:46 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=92=A1=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2076502=20-=20=EA=B4=84=ED=98=B8=20?= =?UTF-8?q?=ED=9A=8C=EC=A0=84=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...14\354\240\204\355\225\230\352\270\260.js" | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git "a/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" "b/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" index 66a0b4c..8c3f9cf 100644 --- "a/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" +++ "b/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" @@ -1,3 +1,48 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 76502 - 괄호 회전하기 +레벨 : Level 2 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/76502 +*/ + +//ANCHOR 2025.10.02 풀이 +function solution2(s) { + let answer = 0; + const n = s.length; + + for (let start = 0; start < n; start++) { + const stack = []; + let isValid = true; + for (let offset = 0; offset < n; offset++) { + // 회전하기 + const c = s[(start + offset) % n]; + + // 여는 괄호인 경우 push + if (c === "(" || c === "[" || c === "{") { + stack.push(c); + continue; + } + // 스택이 비어있는 경우 다음 회전 문자열을 비교하러 감 + if (stack.length === 0) { + isValid = false; + break; + } + // 닫는 괄호인 경우 top과 비교 + const top = stack.pop(); + if (c === ")" && top === "(") continue; + if (c === "]" && top === "[") continue; + if (c === "}" && top === "{") continue; + isValid = false; + break; + } + if (isValid && stack.length === 0) answer++; + } + + return answer; +} + +// ANCHOR 2024.02.22 풀이 + const bracket = { "{": "}", "[": "]", @@ -17,7 +62,7 @@ function isRightBracket(s) { return stack.length === 0; // 짝이 맞지 않는 경우는 올바른 괄호가 아니다. } -function solution(s) { +function solution1(s) { let answer = 0; const stringArr = s.split(""); for (let i = 0; i < stringArr.length; i++) { From b500a1ee12042913aa52397f70236280e32ec40e Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 17:58:01 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=F0=9F=92=A1=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2012973=20-=20=EC=A7=9D=EC=A7=80?= =?UTF-8?q?=EC=96=B4=20=EC=A0=9C=EA=B1=B0=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...34\352\261\260\355\225\230\352\270\260.js" | 26 +++++++++++++++++++ Programmers/README.md | 1 + 2 files changed, 27 insertions(+) create mode 100644 "Programmers/Level2/12973_\354\247\235\354\247\200\354\226\264_\354\240\234\352\261\260\355\225\230\352\270\260.js" diff --git "a/Programmers/Level2/12973_\354\247\235\354\247\200\354\226\264_\354\240\234\352\261\260\355\225\230\352\270\260.js" "b/Programmers/Level2/12973_\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..de6f7c7 --- /dev/null +++ "b/Programmers/Level2/12973_\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,26 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 12973 - 짝지어 제거하기 +레벨 : Level 2 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12973 +*/ + +function isEmpty(stack) { + return stack.length === 0; +} + +function solution(s) { + const stack = []; + + // 초기화 + for (const c of s) { + if (isEmpty(stack)) stack.push(c); + else { + const top = stack[stack.length - 1]; + if (c === top) stack.pop(); + else stack.push(c); + } + } + + return isEmpty(stack) ? 1 : 0; +} diff --git a/Programmers/README.md b/Programmers/README.md index 2eaf23d..b620ba5 100644 --- a/Programmers/README.md +++ b/Programmers/README.md @@ -12,6 +12,7 @@ | 12939 | 최댓값과 최솟값 | [12939_최댓값과_최솟값.js](Level2/12939_최댓값과_최솟값.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12939) | | 12941 | 최솟값 만들기 | [12941_최솟값_만들기.js](Level2/12941_최솟값_만들기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12941) | | 12949 | 행렬의 곱셈 | [12949_행렬의_곱셈.js](Level2/12949_행렬의_곱셈.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12949) | +| 12973 | 짝지어 제거하기 | [12973_짝지어_제거하기.js](Level2/12973_짝지어_제거하기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12973) | | 12987 | 숫자 게임 | [12987_숫자_게임.js](Level3/12987_숫자_게임.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12987) | | 17677 | [1차] 뉴스 클러스터링 | [17677_[1차]_뉴스_클러스터링.js](Level2/17677_[1차]_뉴스_클러스터링.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/17677) | | 17678 | [1차] 셔틀버스 | [17678_[1차]_셔틀버스.js](Level3/17678_[1차]_셔틀버스.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/17678) | From 4ffec67a0f9618e54b0309435cabc5941d174ce9 Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 21:43:42 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=F0=9F=8E=A8=20[=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=A8=B8=EC=8A=A4=2049994=20-=20=EB=B0=A9=EB=AC=B8=20?= =?UTF-8?q?=EA=B8=B8=EC=9D=B4]=20move=20=ED=95=A8=EC=88=98=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 길고 반복되던 switch문을 객체를 이용해서 리팩토링 https://github.com/yoouyeon/algorithm_study/pull/6#issuecomment-3360957599 --- ...1\353\254\270_\352\270\270\354\235\264.js" | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git "a/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" "b/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" index a14be04..d2e4437 100644 --- "a/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" +++ "b/Programmers/Level2/49994_\353\260\251\353\254\270_\352\270\270\354\235\264.js" @@ -13,27 +13,17 @@ function isValidPos(pos) { // 명령어에 따라 업데이트 된 위치를 반환하는 함수 function move(dir, pos) { const { x, y } = pos; - let npos; - switch (dir) { - case "U": - nPos = { x, y: y - 1 }; - if (isValidPos(nPos)) return nPos; - return null; - case "D": - nPos = { x, y: y + 1 }; - if (isValidPos(nPos)) return nPos; - return null; - case "R": - nPos = { x: x + 1, y }; - if (isValidPos(nPos)) return nPos; - return null; - case "L": - nPos = { x: x - 1, y }; - if (isValidPos(nPos)) return nPos; - return null; - default: - return null; - } + + const result = { + U: { x, y: y - 1 }, + D: { x, y: y + 1 }, + R: { x: x + 1, y }, + L: { x: x - 1, y }, + }; + + const newPos = result[dir]; + if (isValidPos(newPos)) return newPos; + return null; } function solution(dirs) { From aa15640b51da6e48723e77ce940dfdf254e79ddb Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 21:46:38 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=F0=9F=8E=A8=20[=F0=9F=92=A1=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=9E=98=EB=A8=B8=EC=8A=A4=2042889=20-=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=EC=9C=A8]=20=EB=B3=80=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 일반적인 변수명 개선 사용하지 않는 변수 제거 https://github.com/yoouyeon/algorithm_study/pull/6#issuecomment-3360957599 --- .../Level1/42889_\354\213\244\355\214\250\354\234\250.js" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" "b/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" index 76eed40..444c817 100644 --- "a/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" +++ "b/Programmers/Level1/42889_\354\213\244\355\214\250\354\234\250.js" @@ -30,8 +30,8 @@ function solution2(N, stages) { // fails 정렬하기 const answer = Object.entries(fails) - .sort(([_a, a], [_b, b]) => b - a) - .map(([idx, value]) => Number(idx)); + .sort(([_, failRate1], [__, failRate2]) => failRate2 - failRate1) + .map(([stageNum]) => Number(stageNum)); return answer; } From 2d2582d1f461792e676f7020a18492bedccee762 Mon Sep 17 00:00:00 2001 From: yoouyeon Date: Thu, 2 Oct 2025 21:54:57 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20[=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EB=9E=98=EB=A8=B8=EC=8A=A4=2076502=20-=20=EA=B4=84?= =?UTF-8?q?=ED=98=B8=20=ED=9A=8C=EC=A0=84=ED=95=98=EA=B8=B0]=20=ED=9A=8C?= =?UTF-8?q?=EC=A0=84=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 모듈러 연산 대신 문자열을 이어붙여서 회전 효과를 줌 https://github.com/yoouyeon/algorithm_study/pull/6#issuecomment-3360955069 --- ...30\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" "b/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" index 8c3f9cf..d0d691b 100644 --- "a/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" +++ "b/Programmers/Level2/76502_\352\264\204\355\230\270_\355\232\214\354\240\204\355\225\230\352\270\260.js" @@ -9,13 +9,14 @@ function solution2(s) { let answer = 0; const n = s.length; + const rotated = s + s; // 문자열을 두 번 이어붙이기 for (let start = 0; start < n; start++) { const stack = []; let isValid = true; for (let offset = 0; offset < n; offset++) { // 회전하기 - const c = s[(start + offset) % n]; + const c = rotated[start + offset]; // 여는 괄호인 경우 push if (c === "(" || c === "[" || c === "{") {