본문 바로가기

Algorithm28

[JS] 2020카카오 : 괄호 변환 프로그래머스 LEVEL2 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/60058 풀이 전략 p는 '(' 와 ')' 로만 이루어진 문자열이며 길이는 2 이상 1,000 이하인 짝수입니다. 문자열 p를 이루는 '(' 와 ')' 의 개수는 항상 같습니다. 만약 p가 이미 "올바른 괄호 문자열"이라면 그대로 return 하면 됩니다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 .. 2022. 6. 21.
[JS] 2019카카오 : 오픈 채팅방 프로그래머스 LEVEL2 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42888 풀이 전략 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다 모든 유저는 [유저 아이디]로 구분한다. [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi") 코드 function solution(record) { var answer = []; const myHm = new Map(); for(const str of record){ const [oper, uid, nick] = str.split(' '); if(oper === 'Leave') continue; myHm.s.. 2022. 6. 20.
[JS] 2021카카오 : 메뉴 리뉴얼 프로그래머스 LEVEL2 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/72411 풀이 전략 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 새로운 메뉴를 제공하기로 결정했습니다. 어떤 단품메뉴들을 조합해서 코스요리 메뉴로 구성하면 좋을 지 고민하던 "스카피"는 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다. 또한 최소, 2명 이상의 손님으로부터 주문된 단품메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함하기로 했습니다. 정답은 각 코스요리 메뉴의 구성을 문자열 형식으로 배열에 담아 사전 순으로 오름차순 정렬해서 return 해주세요. 배열의 각 원소에 저장된 문자열 또한 알파벳 오름차순으로 정렬되.. 2022. 6. 18.
[JS] 백준 2630번 색종이 만들기 문제 링크 https://www.acmicpc.net/problem/2630 풀이 전략 전체 종이가 모두 같은 색으로 칠해져 있지 않으면 가로와 세로로 중간 부분을 잘라서 의 I, II, III, IV와 같이 똑같은 크기의 네 개의 N/2 × N/2색종이로 나눈다. 나누어진 종이 I, II, III, IV 각각에 대해서도 앞에서와 마찬가지로 모두 같은 색으로 칠해져 있지 않으면 같은 방법으로 똑같은 크기의 네 개의 색종이로 나눈다. 이와 같은 과정을 잘라진 종이가 모두 하얀색 또는 모두 파란색으로 칠해져 있거나, 하나의 정사각형 칸이 되어 더 이상 자를 수 없을 때까지 반복한다. 코드 const fs = require("fs"); const input = fs .readFileSync("/dev/stdi.. 2022. 6. 16.
[JS] 백준 18258번 큐2 문제 링크 https://www.acmicpc.net/problem/18258 풀이 전략 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 큐를 이해하고 이를 구현하는 문제이다. 큐의 동작원리를 완전히 이해하고 있어야한다. 코드 const fs = require("fs"); const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); class Node { constructor(data) { this.data = data; this.next = null; } } class Queue { constructor() { this.head = null; this.rear = null; this.l.. 2022. 6. 14.
[JS] 2018카카오 : 압축 프로그래머스 LEVEL2 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/17684 풀이 전략 1. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다. 2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다. 3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다. 4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다. 문제에서 말하는 그대로 구현하면 되는 문제이다. 나는 너무 어렵게 생각하여 한참을 돌아갔다. 코드 function solution(msg) { const answer = []; const dict = new Map(); let idx = 0; while (idx < 26) { dict.. 2022. 6. 13.
[JS] 백준 1874번 스택 수열 문제 링크 https://www.acmicpc.net/problem/1874 풀이 전략 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 코드 const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const input = []; rl.. 2022. 6. 11.
[JS] 백준 4949번 균형잡힌 세상 문제 링크 https://www.acmicpc.net/problem/4949 풀이 전략 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다. (다른 괄호 일 수도 있음) 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다. 코드 const fs = require("fs"); const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); input.pop(); solution(input); function solution(arr) { const answerArr = []; for (const str of arr) { answerArr.push(confirm(str)); }.. 2022. 6. 11.
[JS] 백준 1707번 이분 그래프 문제 링크 https://www.acmicpc.net/problem/1707 풀이 전략 https://gmlwjd9405.github.io/2018/08/23/algorithm-bipartite-graph.html 우선 이분그래프에 대해서 자세히 알 필요가 있다. 이 블로그에 잘 정리해주신 분이 계셔서 상대적으로 쉽게 개념을 이해할 수 있었다. 다시 설명해보자면, 그래프가 존재하는데 이 그래프를 둘로 나누었을 때 모든 정점이 간선으로 연결되어있으면 이분그래프이다. 즉, 같은 그룹에 속한 정점은 인접하지 않아야한다. 코드 const fs = require("fs"); const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); c.. 2022. 6. 10.