programmers
-
프로그래머스 데브코스 - 8월 3주차 WILReact 2023. 8. 21. 00:00
🔔 서론 학습에 지장이 생길 정도로 터무니없이 더운 날씨에게 괴롭힘들 당하는 8월 중순, 드디어 데브코스에서 react과정을 시작하게 됐다. 아마 대부분의 수강생들이 vue보다는 react를 더 많이 사용해보았으리라 생각하고 이번 주차부터 반가움을 금치 못 할거라 생각한다. 내가 react를 공부했던 이유는 단순했다. 주변사람들이 많이 썼기 때문이다. angular나 vue는 주변에서 사용하는 사람도 거의 없었고(실제로 0명..) 현업에서도 react를 많이 사용한다는 이야기를 들었기 때문에 자연스럽게 react를 접하게 됐다. 하지만 깊게 공부할 기회는 없었고 얕은 지식으로 이것저것 부딪히며 공부를 했었기에 부족한 점이 많은 상태여서 이번 react 과정은 부족한 점을 채울 수 있는 정말 좋은 기회라 ..
-
프로그래머스 - 하노이 탑Algorithm 2023. 6. 7. 18:46
문제 풀이 하노이 탑은 원판의 수 n, 시작하는 기둥 start, 중간의 거치는 기둥 mid, 도착할 기둥 end 총 4개의 요소가 필요하다 원판의 수가 1일 경우에는 start에서 바로 end로 넘기면 된다 아닐 경우에는 n-1개의 원판을 start에서 mid로 옮겨준다 n번째 원판을 start에서 end로 옮겨준다 mid에 있던 n-1개의 원판을 end로 옮겨준다 이 과정을 재귀함수를 통해 구현해준다 function solution(n) { let answer = []; let hanoi = (n, start, mid, end) => { if(n === 1) answer.push([start, end]); else { // n-1개의 원판을 start에서 mid로 옮김 hanoi(n-1, start,..
-
프로그래머스 - 구명보트Algorithm 2023. 6. 7. 18:16
문제 풀이 사람들을 담은 배열 people을 몸무게가 가벼운 순인 오름차순으로 정렬시킨다 보트에 people 배열에서 가장 무거운 사람을 태운 뒤, people 배열에서 가장 가벼운 사람을 태울 수 있는지 확인한다 두 사람이 탈 수 있다면 두 사람을 태워 보내고 불가능하다면 다음으로 무거운 사람을 태운 뒤 확인한다 이 과정을 people 배열에 아무도 남지 않을 때 까지 반복한다 function solution(people, limit) { let answer = 0; let boat = []; people.sort((a, b) => a - b); while(people.length) { boat.push(people.pop()); // 보트에 탄 사람의 무게 + 가장 가벼운사람의 무게가 limit보다 ..
-
프로그래머스 - 게임 맵 최단거리Algorithm 2023. 5. 30. 13:22
문제 풀이 큐에 x, y의 좌표값과 방문한 칸의 개수 answer을 초기값으로 각각 0, 0, 1씩 넣어준다 큐에 현재 좌표의 상하좌우의 좌표값과 answer+1이 든 배열을 push해준다 shift()로 큐에서 하나씩 빼내서 해당 좌표가 갈 수 없는 길이라면 다음 요소를 확인하고 갈 수 있는 길이라면 큐에 남은 요소가 없어질 때 까지 이 과정을 반복한다 반복하는 과정중 x, y 좌표가 상대 진영에 도달하면 answer을 리턴한다 큐에 남은 요소가 없어진다면 상대 진영에 도착하지 못한다는 의미이기에 -1을 리턴한다 function solution(maps) { let xLength = maps[0].length; let yLength = maps.length; let xGoal = xLength-1; l..
-
프로그래머스 - 바탕화면 정리Algorithm 2023. 5. 26. 11:00
문제 풀이 이 문제는 드래그를 시작할 좌표와 드래그를 마칠 좌표를 구하는게 관건이다 wallpaper 배열의 요소들 중에서 '#' 문자가 나온 가장 첫번째 요소의 인덱스가 드래그를 시작할 좌표의 y좌표가 된다 wallpaper 배열의 요소에서 가장 첫번째로 존재하는 '#' 문자가 몇 번째 인덱스에 있는지 확인하고 그중 최솟값이 드래그를 시작할 좌표의 x좌표가 된다 wallpaper 배열의 요소들 중에서 '#' 문자가 나온 요소들 중 마지막 요소의 인덱스 + 1 이 드래그를 마칠 좌표의 y좌표가 된다 wallpaper 배열의 요소에서 마지막에 존재하는 '#' 문자가 몇 번째 인덱스에 있는지 확인하고 그중 최댓값 + 1 이 드래그를 마칠 좌표의 x좌표가 된다 function solution(wallpaper..
-
프로그래머스 - 폰켓몬Algorithm 2023. 5. 25. 18:27
문제 풀이 먼저 nums 배열에서 중복제거한 배열을 만들어 둔다 가져갈 수 있는 절반의 개수가 중복제거된 배열길이보다 작다면 nums의 절반길이를 리턴하고, 아니라면 중복제거된 배열길이 리턴한다 function solution(nums) { // nums 배열 중복제거 let setNums = [...new Set(nums)]; // 가져갈 수 있는 절반이 중복제거된 배열길이보다 작다면 nums의절반길이 리턴 아니라면 중복제거된 배열길이 리턴 return (nums.length/2 < setNums.length) ? Math.floor(nums.length/2) : setNums.length; }
-
프로그래머스 - 성격 유형 검사하기Algorithm 2023. 5. 23. 15:18
문제 풀이 성격 유형의 디폴트 값을 'RCJA'로 지정해준다 각 성격유형 쌍을 이루는 배열 ['RT', 'CF', 'JM', 'AN'] 과 이 배열에 매칭되는 [0, 0, 0, 0] 배열을 선언해준다. 이 배열은 각 인덱스의 값이 음수일 경우 각각 [R, C, J, A] 양수일 경우 [T, F, M, N]을 표현한다 survey 배열을 순회하며 survey[i]에 매칭되는 choices[i]의 값이 4보다 클경우 즉, 동의를 선택한 경우와 비동의를 선택한 경우 두가지로 나눈다 이 때 survey[i]의 값이 typeArr에 존재하는 값이라면 즉, 정렬이 되어 있는 상태라면 survey[i]에 매칭되는 typeNum의 인덱스에 choices[i]-4 를 더해준다 반면 survey[i]의 값이 typeArr..
-
프로그래머스 - 짝지어 제거하기Algorithm 2023. 5. 21. 21:26
문제 풀이 입력받은 문자열 s를 배열로 변환한 뒤 순회하면서 각 요소를 새로운 배열 newArr에 push한다 이 때, newArr의 마지막요소와 배열 s의 현재 요소가 다른 값인 경우에 배열 s의 현재요소를 newArr에 push하고, 같은 값인 경우에는 newArr의 마지막 요소를 pop한다 function solution(s) { let newArr = []; s = s.split(''); for(let i = 0; i < s.length; i++){ // s[i] 값이 newArr배열의 마지막값과 다르다면, newArr 배열에 s[i] push if(s[i] !== newArr[newArr.length-1]) newArr.push(s[i]) // s[i] 값이 newArr배열의 마지막값과 같다면,..