본문 바로가기

Algorithm/프로그래머스[Programmers]10

[JS] 2019카카오 : 실패율 프로그래머스 LEVEL1 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42889 풀이 전략 실패율은 다음과 같이 정의한다. - 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라. tages에는 1 이상 N + 1 이하의 자연수가 담겨있다. - 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다. - 단, N + 1 은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다. 코드 function solution(N, stages) { const answer = []; const ar.. 2022. 6. 30.
[JS] 2020카카오 : 키패드 누르기 프로그래머스 LEVEL1 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/67256 풀이 전략 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다. 코드 const keypad = [ ["1", "2", "3"],.. 2022. 6. 26.
[JS] 2021Dev-Matching : 로또의 최고 순위와 최저 순위 프로그래머스 LEVEL1 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/77484 풀이 전략 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다. 코드 function solution(lottos, win_nums) { var answer = []; let zero = 0; let correct = 0; for(const num of lottos){ if(num === 0) zero++; for(const win of win_nums){ if(num === win) correct++; } } let best = 7 - (zero+correct); let worst = 7 - correct; if(best >= 7) best = 6 if(.. 2022. 6. 24.
[JS] 2022카카오 : 신고 결과 받기 프로그래머스 LEVEL2 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/92334 풀이 전략 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. - 신고 횟수에 제한은 없습니다. - 서로 다른 유저를 계속해서 신고할 수 있습니다. - 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 자기 자신을 신고하는 경우는 없습니다. 코드 function solution(id_list, report, k) { const.. 2022. 6. 23.
[JS] 2020카카오 : 수식 최대화 프로그래머스 LEVEL2 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/67257 풀이 전략 단, 연산자의 우선순위를 새로 정의할 때, 같은 순위의 연산자는 없어야 합니다. 수식에 포함된 연산자가 2개라면 정의할 수 있는 연산자 우선순위 조합은 2! = 2가지이며, 연산자가 3개라면 3! = 6가지 조합이 가능합니다. 만약 계산된 결과가 음수라면 해당 숫자의 절댓값으로 변환하여 제출하며 제출한 숫자가 가장 큰 참가자를 우승자로 선정하며, 우승자가 제출한 숫자를 우승상금으로 지급하게 됩니다. "-56+100"처럼 피연산자가 음수인 수식도 입력으로 주어지지 않습니다. 같은 연산자끼리는 앞에 있는 것의 우선순위가 더 높습니다. 코드 function solution(expressi.. 2022. 6. 22.
[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] 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.