본문 바로가기

Algorithm5

프로그래머스 - 오픈채팅방 프로그래머스 - 오픈채팅방 문제 접근 방법 딕셔너리를 활용하여 uid별로 닉네임을 기록한뒤 출입로그를 최종 닉네임으로 나타낸다. 내가 생각한 work flow 닉네임의 변경은 'Enter' 또는 'Change'일 때만 일어나므로 해당 remark가 존재하면 닉네임을 다시 기록한다. Change는 최종출력인 출입로그에 기록되지 않는다. 모든 닉네임 변경과정이 종료된 시점에서 출입로그의 닉네임을 uid에 맞게 작성한다. 완성한 솔루션 JavaScript function solution(record) { // uid를 기준으로 닉네임을 수집한다. // (변경되었다면 최종만) let nicknameList = {}; let greet = { 'Enter': '들.. 2021. 5. 12.
프로그래머스 - 소수찾기 프로그래머스 - 소수찾기 문제 접근 방법 주어진 문자열(숫자로만 구성된)로 생성가능한 모든 종류의 조합(순서를 고려한)을 구한다. 그 조합중 가장 큰 수를 찾는다. 가장 큰 수까지의 소수리스트를 생성한다. 모든 조합을 순회하며 소수인지 확인한다. prime_num_list생성 n까지의 prime_num_list를 생성한다. 단 생성 규칙을 다음과 같이 정한다. 각 index의 위치는 해당하는 정수를 의미한다. 해당 숫자가 소수인지는 Boolean값으로 나타낸다. ex) 숫자 5는 소수인가 -> prime_num_list[5] -> true 모든 조합 생성 주어진 문자열에 대해 1개씩 선택하는 모든 조합부터 문자열의 길이만큼 선택하는 조합까지를 전부 담고있는 리스트를 생성한다.(선택하는 순서를 고려한다.).. 2021. 4. 29.
프로그래머스 - 스킬트리 프로그래머스 - 스킬트리 문제 접근 방법 정규 표현식을 사용해서 주어진 스킬트리와 관련없는 스킬들은 전부 지운다. 남아있는 문자열이 주어진 스킬트리 문자열에서 어느위치에 있는지 확인하다. 주어진 스킬트리가 'ACD'라고 가정하고 이것과 상관없는 모든것을 지운다. 남은 문자열의 상태 및 위치를 파악한다. 이때, 유도되는 결과는 다음과 같다. 빈문자열이 남았다면, 모두 주어진 스킬트리와 관련이 없던 것으로 어떠한 문자열이 왔더라도 정상적인 스킬트리이다. 빈문자열이 아니고, 주어진 스킬트리 문자열에서의 위치가 0번째 라면, 정상적인 스킬트리이다. ex) 'ACD'에서 스킬트리에 의해 배우는 단계는 'A', 'AC', 'ACD'밖에 존재하지.. 2021. 4. 29.
프로그래머스 - 괄호변환 프로그래머스 - 괄호변환 2021/04/15 문제 접근 방법 helper함수 '더이상 쪼갤 수 없는 균형잡힌 문자열'과 '남은 문자열'로 나누는 함수를 만든다. '(' 와 ')' 의 수가 같다면 균형잡힌 문자열이다. 올바른 괄호 문자열 올바른 괄호 문자열인지 검증해야 한다. 이어진 괄호를 반복적으로 제거하여 남은 괄호가 있는지 확인하다. 완성된 solution function solution(p) { if (p === '') return ''; let [u, v] = helper(p); // u = 균형잡힌 문자열, v = 남은 문자열 if (isPerfect(u)) return u + solution(v); else .. 2021. 4. 15.
프로그래머스 - 삼각 달팽이 프로그래머스 - 삼각 달팽이 2021/04/14 문제 접근 방법 list의 길이가 1부터 하나씩 증가하는 형태로 n개의 list를 생성한다. 1부터 가장 큰 수까지 방향에 맞게 list에 넣는다. 가장 큰 수 가장 큰 수는 n이 1, 2, 3, 4, 5, 6 일 때 1, 3, 6, 10, 15, 21 과 같이 [초항이 1이며 [초항이 2이고 공차가 1인 '등차수열']을 계차로 갖는 '계차수열']의 n번째 항임을 알 수 있다. Layer class를 만든다. Array를 상속받아 Layer라는 클래스를 만든다. 삼각 달팽이의 각 층을 구성하게 할 것이다. 아래와 같은 기능이 필요하다. 가장 앞에서부터 비어있는(empty)곳에 삽입 가장 뒤에서부터 비어있는(empty)곳에 삽입 .. 2021. 4. 14.