알고리즘 문제풀이/프로그래머스 17

불량 사용자 / js 풀이

프로그래머스 : 불량 사용자 https://school.programmers.co.kr/learn/courses/30/lessons/64064 프로그래머스 3단계, 2019 카카오 개발자 겨울 인턴십 문제입니다. 코드 function solution(user_id, banned_id) { let answer = 0; const bannedList = banned_id.map((_) => 0); const set = new Set(); const dfs = (index, count, text) => { if(count === banned_id.length){ set.add(text.split(' ').sort().join('')); } if(index >= banned_id.length){ return; ..

스킬트리 / js 풀이

프로그래머스 : 스킬트리 https://programmers.co.kr/learn/courses/30/lessons/49993 문제풀이 이번 문제는 크게 어려워 보이지는 않았지만, 막상 풀려고 보았을 때 까다로운 문제였습니다. 코드 function solution(skill, skill_trees) { let answer = 0; skill_trees.forEach(elem => available(skill, elem) === true && answer ++); // skill_trees를 만들어둔 available 함수로 확인하며 개수를 체크 return answer; } function available(skill, tree) { let hashMap = {}, k = 0; // 해시맵 방식을 활용하..

[1차] 뉴스 클러스터링 / js 풀이

프로그래머스 : [1차] 뉴스 클러스터링 https://programmers.co.kr/learn/courses/30/lessons/17677 문제풀이 이번 문제는 2018 카카오 블라인드 채용 코딩테스트에 나왔던 문제입니다! 이번 문제도 지문에 나와있는 방식을 그대로 구현하면 됩니다. 문자열을 두개씩 끊어 집합들을 만든 후, 영문만을 포함한 집합들의 교집합과 합집합의 개수를 구합니다. 코드 function solution(str1, str2) { let tmp1 = [], tmp2 = [], inter = 0; // 임시배열 tmp1, tmp2와 교집합 개수를 카운트할 inter 변수 str1 = str1.toLowerCase();// 문자열을 소문자로 변환 str2 = str2.toLowerCase(..

괄호 변환 / js 풀이

프로그래머스 : 괄호 변환 https://programmers.co.kr/learn/courses/30/lessons/60058 문제풀이 이번 문제는 2020 카카오 블라인드 채용에 나왔던 문제입니다. 프로그래머스 2단계 연습문제에 있네요! 해당 문제는 지문에 적혀있는 문제 풀이의 순서를 그대로 코드로 입력하면 해결 할 수 있습니다. 제가 풀었던 코드는 더 짧았지만 포스팅을 위해서 단계별로 나누어 주석으로 적어두었습니다 ㅎㅎ 코드 function solution(p) { if(p === "") return p; // 1단계 let u = '', v = '', left = 0, right = 0; for(let i = 0; i elem === '(' ? ')' : '(').join(''); // 4-4단계..

프린터 / js 풀이

프로그래머스 : 프린터 https://programmers.co.kr/learn/courses/30/lessons/42587 문제풀이 이번 문제는 프린터라는 문제입니다. 중요도가 높은 순서대로 프린팅을 진행하면서도 내가 원하는 파일의 순서를 알아야 하기 때문에, 인덱스(순서)를 중요도와 함께 묶어 해결하는 솔루션 함수를 짜시면 됩니다. 코드 function solution(priorities, location) { let check = 0, cnt = 1; // check는 중요도가 가장 높은 파일을 판별할 때 사용 // cnt는 인쇄 순서 let hashMap = priorities.map((elem, index) => [elem, index]); // 대기목록의 우선도와 인덱스를 함께 배열로 묶어 배..

튜플 / js 풀이

프로그래머스 : 튜플 https://programmers.co.kr/learn/courses/30/lessons/64065 문제풀이 이번 문제는 2019 카카오 개발자 겨울 인턴십 코딩테스트에서 출제 되었던 문제입니다. 처음에 문제 내용이 이해가 잘 되지 않아서 시간을 썼던 문제입니다. 결론은 제일 작은 크기의 집합 다음 순서로 어떤 수가 추가되는지 검증하기만 하면 됩니다. 저는 각 집합들을 길이 순으로 정렬하고 중복값을 없애주었습니다! 코드 function solution(s) { let answer = []; s = s.slice(2, s.length-2).split('},{'); // 문자열 s의 맨앞 문자 {{ 와 맨뒤의 }} 를 제외하고 },{ 기준으로 나누어 배열에 담음 // 그럼 s는 ['2..

네트워크 / js 풀이

프로그래머스 : 네트워크 https://programmers.co.kr/learn/courses/30/lessons/43162 문제풀이 프로그래머스 3단계 풀이에 해당하는 문제입니다. 사실 평범한 DFS/BFS 문제이며 복잡하지 않습니다. 행렬이 연결되어 있으면 1이고 연결되어 있지 않으면 0인데, 방문을 체크하며 연결되어있는 요소에서 재귀적으로 함수를 실행하면 됩니다. 코드 function solution(n, computers) { var answer = 0; let tmp = Array.from({length: 200}, () => false); // 방문체크용 배열 function dfs(start){ // 재귀함수 tmp[start] = true; // 방문체크 for(let i=0; i

오픈채팅방 / js 풀이

프로그래머스 : 오픈채팅방 https://programmers.co.kr/learn/courses/30/lessons/42888 문제풀이 이번 문제는 2019 카카오 블라인드 채용 관련 코딩테스트 문제이며, hash map을 적용하는 풀이입니다. value가 아무리 바뀌고 중복되더라도 고유한 key 값을 가지고 있으면 찾아낼 수 있습니다. 이 문제에서는 유저 아이디가 key가 되고, 닉네임이 value가 되겠군요. 코드 function solution(record) { let answer = [], mapSet= {}; const tmp = record.map(elem => elem.split(' ')); // 문자열로 된 배열의 요소를 ' ' 로 찢어 각각 다른 배열요소로 만들어 tmp에 담는다 // ..

타겟 넘버 / js 풀이

프로그래머스 : 타겟 넘버 https://programmers.co.kr/learn/courses/30/lessons/43165 문제풀이 이번 문제는 DFS/BFS 관련 문제입니다. 풀이 자체는 간단하지만, 고민을 했던 문제였고 최종적으로는 다른 풀이를 참고했습니다. 풀이는 재귀적 방식으로 주어진 배열의 길이만큼 +와 -연산을 했을 때, 타겟 넘버가 되는 시점을 찾으면 됩니다. 코드 function solution(numbers, target) { let answer = 0; function dfs(index, sum){ if(index === numbers.length){ if(target === sum) answer++; return; } dfs(index+1, sum+numbers[index]); ..

크레인 인형뽑기 게임 / js 풀이

프로그래머스 : 크레인 인형뽑기 게임 https://programmers.co.kr/learn/courses/30/lessons/64061 문제풀이 이번 문제는 프로그래머스의 2019 카카오 개발자 겨울 인턴십 코딩 테스트에서 출제되었던 문제입니다. 개발공부를 시작한지 얼마 되지 않았을 적 풀었을 때는 어렵다고 생각했었는데, 지금 보니까 그다지 어려운 문제는 아니었던 것 같아요^^ moves 배열에 해당하는 인덱스 만큼 2차원 배열 아래로 이동시키며 인형을 뽑습니다. 뽑은 인형은 스택( 저는 그냥 배열을 사용했습니다 )에 담아, 다음에 뽑은 인형과 비교하여 카운트를 해 나가면 됩니다. 자세한 설명은 아래 코드에 주석으로 기재하였습니다~ 코드 function solution(board, moves) { l..