프로그래머스
-
[프로그래머스/JavaScript] 네트워크 (Feat. DFS, 조금씩 이해된다...)IT Study/프로그래머스 2023. 12. 13. 16:32
📊 1. 나만의 테스트 케이스 만들기 (많을수록 좋음) 아래와 같이 연결된 네트워크가 있다고 가정해봅시다. 0 / 1 ----/------- 4 \ / \ / 2 3 테스트 케이스 n = 5 computers = [[1, 0, 1, 0, 0], [0, 1, 1, 0, 1], [1, 1, 1, 0, 0], [0, 0, 0, 1, 0], [0, 1, 0, 0, 1]] 그래프의 형태로 나타내면 아래와 같을 것 같군요. (연결 상태 확인하기) 0 : [2] 1 : [2, 4] 2 : [0, 1] 3 : [] 4 : [1] 이 경우에는 "0, 1, 2, 4"와 "3"가 개별 네트워크로 연결되어, return(결과값)은 2여야 합니다. 🤔 2. 사고하기 (1) 0을 확인한다. (0) (2) 0에 연결된 아이는 2이..
-
[프로그래머스/JavaScript] 튜플 (Feat. replace?, Set?)IT Study/프로그래머스 2023. 12. 3. 18:57
위 문제 풀이 시작합니다. 👿 1. 문제 접근 "일단 저 요상한 데이터 형식을 배열 안의 배열 형식으로 바꿔야겠다!" 고 생각했습니다. (1) 맨 앞, 맨 뒤에 중괄호 2개를 빼자. {{2},{2,1},{2,1,3},{2,1,3,4}} → 2},{2,1},{2,1,3},{2,1,3,4 (2) 모든 { 를 빼자. 2},{2,1},{2,1,3},{2,1,3,4 → 2},2,1},2,1,3},2,1,3,4 (3) `},`가 마치 / (슬래시)와 같이 문자들을 구분해주니, 이 구분자를 기준으로 문자열을 분할하여 배열에 담자. 2},2,1},2,1,3},2,1,3,4 → [ '2', '2,1', '2,1,3', '2,1,3,4' ] (4) 분할된 문자열의 배열을 배열 안의 배열로 변환하자. [ '2', '2,1'..
-
[프로그래머스/JavaScript] 타겟 넘버 (Feat. DFS.. 재귀함수.. 너 뭔데)IT Study/프로그래머스 2023. 12. 1. 14:01
이 문제를 처음 봤을 때에는 어떻게 접근해야 할지 도무지 감이 오지 않았습니다. DFS, BFS를 제 손으로 구현해본 적이 없었기에 더욱 주춤하게 되는 문제였는데요. 문제를 풀어낸 과정에 대해 블로그 글로 정리하고자 합니다. 1. 무지성으로 들이대기 function solution(numbers, target) { var answer = 0; // 1. total (numbers 합계) 구하기 const total = numbers.reduce((accVal, curVal) => { return accVal + curVal; }) // 2. purpose ((total - target) / 2) 구하기 const purpose = (total - target) / 2; // 3. numbers 내에서 합..
-
[프로그래머스/JavaScript] 타겟 넘버 (Feat. forEach 함수)IT Study/프로그래머스 2023. 11. 7. 14:26
📃 최종 코드 테스트 통과에 정말 많은 시간이 소요되었습니다. (왜인지 확인하기 위해 시간복잡도를 확인해 봤습니다.) 아래 코드에서 저는 먼저 numbers 배열의 합을 구한 뒤, 1부터 numbers 배열의 길이까지의 원소를 선택하는 모든 조합을 구합니다. 각 조합의 합이 목푯 값과 일치하는지 확인합니다. 이렇게 모든 조합을 구하는 과정에서 getCombine 함수를 사용하며, 이 함수는 numbers 배열의 각 원소를 기준으로 재귀적으로 조합을 구합니다. 따라서, 이 함수의 시간 복잡도는 O(2^n)입니다. 전체 코드의 시간 복잡도는 각 원소를 선택하는 경우의 수(2^n)와 원소를 선택하는 횟수(n)를 곱한 O(n * 2^n) function solution(numbers, target) { let ..
-
[프로그래머스/JavaScript] 베스트앨범 (Feat. 첫 Lv3)IT Study/프로그래머스 2023. 11. 6. 14:49
초기 코드 function solution(genres, plays) { // 베스트 앨범에 들어갈 노래의 고유 번호를 저장하는 Array let answer = []; // 장르 별 총 재생 수를 나타내는 Map let genreTotalPlayMap = new Map(); for (let i = 0; i < genres.length; i++) { const genre = genres[i]; const play = plays[i]; if (genreTotalPlayMap.has(genre)) { genreTotalPlayMap.set(genre, genreTotalPlayMap.get(genre) + play); } else { genreTotalPlayMap.set(genre, play); } } /..
-
[프로그래머스/JavaScript] 나머지가 1이 되는 수 찾기IT Study/프로그래머스 2023. 11. 2. 11:26
이 문제를 처음 봤을 때는 굉장히 쉽다고 생각했습니다. 그저 for문을 돌려 나머지가 1이 되는 수를 찾으면 되니까... 너무 쉽잖아?라고 생각했는데요. 그러나 이제는 시간복잡도를 고려해 코드를 작성해야겠다는 생각에 조금 더 고민하는 시간을 갖게 되었습니다. 🤔 생각의 흐름 (1) n을 x로 나눈 나머지가 1이 되도록 하는 가장 자연수를 찾기 위해 n % x === 1을 꼭 사용해야 할까? (2) 새로운 변수 m을 m = n - 1로 선언하고, 나머지가 0이 되는 가장 작은 자연수를 찾아보자. (3) for문으로 전체를 돌린다면 시간복잡도는 O(n)이 될 텐데... 어떻게 하면 시간복잡도를 줄일 수 있을까? (4) m이라는 수를 기준으로 중간 값, 혹은 제곱근 값 이하에서 찾으면 어떨까? 💻 결과 코드 ..
-
[프로그래머스/JavaScript] 달리기 경주 (Feat. 찾기 연산의 시간복잡도)IT Study/프로그래머스 2023. 10. 30. 12:27
☝🏻 1차 시도 function solution(players, callings) { let answer = [...players]; for(let i = 0; i < callings.length; i++) { const calling = callings[i]; const index = answer.indexOf(calling); const temp = answer[index - 1]; answer[index - 1] = answer[index]; answer[index] = temp; } return answer; } 🥚 중간 과정 function solution(players, callings) { let answer = [...players]; for(let calling of callings) {..
-
[프로그래머스/JavaScript] 주사위 게임 3 (Feat. Map)IT Study/프로그래머스 2023. 10. 11. 17:02
어우... 정말 어려웠는데요. 이 문제를 풀기 위해 찾았던 개념들에 대해 먼저 정리하고자 합니다. 1. JavaScript의 Map - 값을 저장(변경) : set(key, value) - key 존재 여부 확인 : has(key) - key에 해당하는 value 가져오기 : get(key) - size(크기) 확인 : size - map의 key, value 확인(사용) : forEach((value, key) => {}) 2. JavaScript의 배열 - 값 저장 : push(값) - 배열 중 최소 값 구하기 : Math.min(... 배열명) 3. 절댓값 구하기 - 절댓값 : Math.abs(숫자) 4. 제곱 구하기 - 제곱 : ** 초기 코드 function solution(a, b, c, d)..