코딩테스트 문제풀이

[인프런] Node.js / 섹션6-자료구조(큐) / 7. 교육과정 설계

문제 현수는 1년 과정의 수업계획을 짜야 합니다. 수업중에는 필수과목이 있습니다. 이 필수과목은 반드시 이수해야 하며, 그 순서도 정해져 있 습니다. 만약 총 과목이 A, B, C, D, E, F, G가 있고, 여기서 필수과목이 CBA로 주어지면 필수과목은 C, B, A과목이며 이 순서대로 꼭 수업계획을 짜야 합니다. 여기서 순서란 B과목은 C과목을 이수한 후에 들어야 하고, A과목은 C와 B를 이수한 후에 들 어야 한다는 것입니다. 현수가 C, B, D, A, G, E로 수업계획을 짜면 제대로 된 설계이지만 C, G, E, A, D, B 순서로 짰다면 잘 못 설계된 수업계획이 됩니다. 수업계획은 그 순서대로 앞에 수업이 이수되면 다음 수업을 시작하다는 것으로 해석합니다. 수업계획서상의 각 과목은 무조건..

[인프런] Node.js / 섹션6-자료구조(큐) / 6. 공주 구하기

문제 다음과 같은 방법으로 공주를 구하러 갈 왕자를 결정한다. 1번 왕자부터 N 번 왕자까지 순서대로 시계 방향으로 돌아가며 동그랗게 앉게 한다. 그리고 1번 왕자부터 시 계방향으로 돌아가며 1부터 시작하여 번호를 외치게 한다. 한 왕자가 K(특정숫자)를 외치면 그 왕자는 공주를 구하러 가는데서 제외되고 원 밖으로 나오게 된다. 그리고 다음 왕자부터 다시 1부터 시작하여 번호를 외친다. 이렇게 해서 마지막까지 남은 왕자가 공주를 구하러 갈 수 있다. 예를 들어 총 8명의 왕자가 있고, 3을 외친 왕자가 제외된다고 하자. 처음에는 3번 왕자가 3 을 외쳐 제외된다. 이어 6, 1, 5, 2, 8, 4번 왕자가 차례대로 제외되고 마지막까지 남게 된 7 번 왕자에게 공주를 구하러갑니다. N과 K가 주어질 때 ..

[인프런] Node.js / 섹션6-자료구조(스택) / 5. 쇠막대기

문제 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향이다. 이러한 레이저와 쇠막대기의 배치는 다음과 같이 괄호를 이용하여..

[인프런] Node.js / 섹션6-자료구조(스택) / 4. 후위식 연산(postfix)

문제 후위연산식이 주어지면 연산한 결과를 출력. 만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 12 첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다. 식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다. 풀이 function solution(s) { let answer; let lt, rt; const stack = []; for (x of s) { if (!isNaN(x)) stack.push(Number(x)); else { rt = stack.pop(); lt = stack.pop(); if (x === "+") stack.push(lt + rt); else if (x === "-") stack.push(lt - rt); e..

[인프런] Node.js / 섹션6-자료구조(스택) / 3. 크레인 인형뽑기(카카오 기출)

문제 게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. 죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인 이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에 는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인 형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 ..

[인프런] Node.js / 섹션6-자료구조(스택) / 2. 괄호문자제거

입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력 ▣ 입력예제 (A(BC)D)EF(G(H)(IJ)K)LM(N) ▣ 출력예제 EFLM 풀이 function solution(s) { let answer = ""; const stack = []; for (let x of s) { if (x === "(" || (stack.includes("(") && x !== ")")) stack.push(x); else if (!stack.includes("(") && x !== ")") answer += x; else if (x === ")") { if (stack.length === 0) return "잘못된 입력"; // 소괄호도 모든 문자에 속하는거라면 굳이 처리 안해도 될 듯..

[인프런] Node.js / 섹션6-자료구조(스택) / 1. 올바른 괄호

괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력 (())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다. 풀이 function solution(s) { let answer = "YES"; const stack = []; for (let x of s) { if (x === "(") stack.push(x); else { if (stack.length === 0) return "NO"; stack.pop(); } } if (stack.length > 0) return "NO"; return answer; } let a = "(()(()))(()"; console.log(solution(a)); 여는 괄호 만나면 stack에 넣고, 닫는 괄..