Algorithm/Algorithm Study

    [프로그래머스] 해시 _ 베스트 앨범 Lv3, javascript

    2021_12_20 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 문제 수도코드 result 배열 선언 1. 속한 노래가 많이 재생된 장르를 먼저 수록 (플레이 순위가 높은 장르명을 배열로 추출) countedGenres 상수 선언, genres 배열에 reduce를 사용하여 객체에 저장 만약 acc[cur.genre]가 존재한다면, 기존 값에 cur.plays를 더한다 그렇지 않다면, 키를 갖고, cur.plays를 할당 sortedGenres 배열을 선언 (객체를..

    [프로그래머스] DFS _ 타켓 넘버

    2021_11_21 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 문제 수도코드 dfs 재귀함수를 만든다. 인덱스와 sum을 인자로 받음 탈출 조건 인덱스가 numbers.length와 같은 경우 sum과 target이 같아진 경우 경우의 수를 1 증가시킨다 양수 조건으로 인덱스 1씩 증가시키며 재귀함수 호출 음수 조건으로 인덱스 1씩 증가시키며 재귀함수 호출 최종 result 리턴한다 풀이 function solu..

    [프로그래머스] 해쉬 - 위장

    2021_11_14 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 위장 programmers.co.kr 문제 수도코드 clothes[i][1] > 의상의 종류 clothes[i][0] > 의상의 이름 obj 빈객체 선언 포문으로 clothes를 순회 obj[el[1]] 가 이미 있다면 기존 값 + 1 obj[el[1]] 가 없다면 값은 0; obj를 순회, 경우의 수를 구한다 result 변수에 *= (obj[key] + 1) // 1은 해당 부위 파츠를 착용하지 않는 경우 최종 result - 1 리턴 // 1은 모두 착용하지 않는 경우 풀이 function solution(clothes) { let result = 1; let obj = {}; for (let el of clothes) ..

    [프로그래머스] 해시 - 완주하지 못한 선수

    2021_11_14 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 문제 마라톤에 참가했지만 완주는 못한 1인의 이름을 출력하는 문제이며, 이 문제에서 신경써야할 부분은 동명이인이 있을 수 있다는 점이다. 문제를 보자마자 두 가지의 문제 풀이가 떠올랐다. completion을 순회하면서 그 요소로 participant에서 해당되는 인덱스를 찾고, slice한 값을 participant에 계속 재할당, 최종적으로 남은 참가자를 리턴하는 방법 (O(n^2..

    [leet-code] Two Sum

    2021_11_07 알고리즘 스터디 문제 URL :https://leetcode.com/problems/two-sum/ Two Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 nums 배열에서 두 개의 인자를 더했을 때 target이 되는 인덱스를 배열에 담아 리턴한다 /** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(n..

    [프로그래머스] 완전 탐색 - 소수 찾기

    2021_11_07 알고리즘 스터디 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42839?language=javascript 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 문제 풀이 function solution(numbers) { const result = []; const validMaxNum = numbers.split("").sort((a, b) => parseInt(b) - parseInt(a)).map((num) =>..

    [프로그래머스] 완전탐색 _ 카펫 (javascript)

    2021_10_10 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr 문제 문제를 보고 가장 중요한 부분을 먼저 확인했다. x >= y의 조건을 성립하고, brown은 직사각형이 테두리 한 줄을 차지하며 yellow는 brown을 제외한 공간을 차지한다. 어차피 x의 길이는 y와 같거나 길어야한다는 조건이 있기때문에 제곱근을 먼저 구해 초기 x값을 디폴트로 지정하는 방법을 생각했다. 수도코드 상수 blocks 선언, brown + yellow 값, 전체 블록의 개수를 ..

    [프로그래머스] 완전 탐색 _ 모의고사 (javascript)

    2021_10_12_ 알고리즘 스터디 문제 풀이 모의고사 -> 문제 URL 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 문제 문제를 보자마자 반복되는 패턴을 먼저 확인했다. dropper1 은 [1, 2, 3, 4, 5], dropper2는 [2, 1, 2, 3, 2, 4, 1, 5], dropper3은 [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] 반복적으로 나와 이것을 이용해 answers의 길이만큼 각 수포자가 제출한 답안을 만든 뒤, 그 값으로 answers의 인자(답)과 비교하여 알맞은 ..

    [프로그래머스] 정렬 _ 가장 큰 수 / H-Index

    2021_09_12 알고리즘 스터디 문제 풀이 1. 가장 큰 수 --> URL 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 문제 처음에는 문제를 확인하고 자릿수가 작고 그 중에서도 큰 값을 기준으로 솔팅하면 된다고 생각했었다. 하지만 그럴 경우 입출력 예 2에 해당하는 정답이 "9533430"로 나오게 된다. 자릿수가 적은 것이 크기보다 우선으로 정렬이 되기 때문인데 가만히 생각을 하다보니 로직에 오류가 있다는 것을 깨닫고 수도코드를 새로 작..

    [프로그래머스] 탐욕법(Greedy) _ 조이스틱

    2021_09_05 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 문제 수도코드 알파벳 상수 선언 'ABCDEFGHIJKLMNOPQRXTUVWXYZ' count = 0 temp -> name.length 만큼의 길이를 가진 'A'로 이루어진 문자열 let i = 0; while문으로 temp가 name과 같아질때까지 반복 name[i] temp[i]와 같지 않다면, 조이스틱을 써야 함 alphabet.indexOf(name[i]), 인덱스를 찾고, ..

    [프로그래머스] 탐욕법(Greedy) _ 큰 수 만들기

    2021_08_29 알고리즘 스터디 문제 풀이 문제 URL 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 문제 문제를 읽지마자 이건 조합알고리즘을 재귀로 구현하고, 그 중 제일 큰 수를 리턴하면 되겠다라고 생각이 들었다. 1차 문제풀이 function combination(letters, pickNum) { let arr = []; function aux(str, lastIdx) { if (str.length === pickNum) { arr.push(str); return; } for (let i = lastIdx + 1; i < letters.length; i++) { aux(str + letters[i], i) } } aux("", -1) return arr; } function..

    [프로그래머스] 탐욕법(Greedy) _ 구명보트

    2021_08_29 알고리즘 스터디 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42885# 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 문제 이 문제를 보고 든 생각은 우선 제일 무거운 순서대로 people 배열을 정렬하고, 제일 작은 요소를 순서대로 더했을 때 limit을 초과한다면 해당 요소들만을 같은 보트에 태우려고 했었는데 문제에는 분명히 '한 번에 최대 2명씩 밖에 탈 수 없고'라는 내용이 포함되..

    [프로그래머스] 스택 (stack) / 큐 (queue) _ 다리를 지나는 트럭

    2021_08_15 알고리즘 스터디 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42583?language=javascript 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 문제 문제를 추론하는 과정에서 한 가지 이해가 어려웠던 게 있었는데, 트럭에 소요되는 시간에 대한 기준이었는데, 문제의 설명이 조금 부족하지 않았나 싶다. 문제의 인자로 주어지는 bridge_length 가 만약 2의 값을 가지고 있다면,..

    [프로그래머스] 스택 (stack) / 큐 (queue) _ 프린터

    2021_08_15 알고리즘 스터디 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 문제 문제를 파악했을 때 stack의 shift, push 메소드를 통해 문제를 해결할 수 있을 거라는 생각이 들었다. 처음에는 문제를 보고 array map 메소드를 통해 { priority : number; index: number } 객체 형식을 원소로 갖는 배열..

    [프로그래머스] 2018 카카오 블라인드 _ [1차]뉴스 클러스터링

    2021_08_08 스터디 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/17677?language=javascript 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr 문제 이번 주는 알고리즘한테 한바가지 맞았다. 우선 위 문제에서 다중집합의 처리가 조금 까다로울 뿐 이외는 구현이 어렵지 않다고 생각을 했고 곧바로 수도코드를 작성해나갔다 수도코드 // 1. newStr1, newStr2를 두 글자씩 끊어 집합을 만들어..

    [프로그래머스] 2020 카카오 인턴십 _ 수식 최대화 (도른자)

    2021_08_08 스터디 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/67257?language=javascript# 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 문제 이 문제도 도른놈이었다. 난이도별로 점진적으로 스터디 문제를 풀고 있다 보니 이제 온통 어려운 것들만 만나고 있다. 머리가 녹는다는 게 이런 기분일까 --- 우선 수도코드를 작성하기 전 문제를 탐색 했다. string타입의 expression 매개변수가 주어지는데,..

    [프로그래머스] lv3 2019 카카오 블라인드_ 추석 트래픽

    2021_07_18 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/17676?language=javascript getRangeDate(log)) > 맵핑, 각 로그들의 start, last가 객체형식으로 담겨진 배열 // 최초 로그의 시작 시점부터 1ms 단위로 데이트를 추가하고 (기준) / 마지막 로그의 종료 시점까지 // >> new Date(start) // 그 데이트를 기점으로 1000만큼씩 블록을 잡는다 (기준 ~ 기준 + 1s 범위) // blockStart = 기존 데이트 // blockEnd = 기존 데이트 + 1000ms를 한 값 // 해당되는 로그를 찾는다 //어떻게? // 경우 // 1. 로그의 시작점이 기준보다..

    [프로그래머스] 2019 카카오 인턴쉽 _ 크레인 인형뽑기

    2021_07_18 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 문제 board 판에서 moves의 원소들의 위치에 있는 제일 위에 있는 인형을 stack 형태로 담아서 저장하고, 2개 이상 중복되어 제거되는 인형들의 갯수를 리턴하는 문제였다. 의사코드 1. 삽질 // [[0,0,0,0,0], > board[j] === row // [0,0,1,0,3], // [0,2,5,0,1], j가 적을 수록 높은 ..

    [프로그래머스] 2020 KAKAO 블라인드 _ 문자열 압축

    2021_07_11 문제 풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 문제 의사코드 // s를 1부터 s.length 까지의 단위로 잘라 압축했을 때 가장 짧은 것을 리턴한다 // 결과를 담을 빈배열 변수 선언 // s의 길이만큼 while 문을 순회한다 ) 단위마다 s를 잘라보기 위함 변수 i 선언 // s를 일단 split으로 모두 쪼갠다 string.split ex ) [..

    [프로그래머스] 2019 KAKAO 블라인드 _ 오픈 채팅방

    2021_07_11 문제풀이 문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42888?language=javascript 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제 의사 코드 // 방을 개설한 사람이 보게 되는 최종 메시지를 문자열 배열 형태로 return // 모든 유저의 아이디를 객체의 키로 저장, // Enter > 무조건 닉네임 포함 // Leave > 아이디 불포함 // Change > 덮어씌울 닉네임 포함 1. record를 f..