분류 전체보기 33

프로그래머스 level 1 - 신고 결과 받기(Javascript)

신고 결과 받기 배운 것, 유의할 것 객체를 사용한 문제 풀이 문제 자체는 이해안되는 점도, 구현의 어려운 점도 없었다. 객체를 사용해서 풀어서 뿌듯 배열에서 중복 값 삭제 const array = [1, 2, 3, 3, 4, 4, 5]; const set = new Set(array); const newArray = [...set] 객체에서 값만 뽑아 배열로 const obj = { a:1, b:2, c:3, d:4, } Object.valuse(obj) // [1, 2, 3, 4] 정답코드 function solution(id_list, report, k) { // 유저가 받은 결과 메일 수 var answer = []; // 동일인이 같은 유저를 여러번 신고해도 중복되지 않으므로 중복 제거 rep..

프로그래머스 level 2 - 두 큐 합 같게 만들기(Javascript)

두 큐 합 같게 만들기 배운 것, 유의할 것 시간초과와의 싸움(했다치고!) 문제 해결 방법을 찾는 것은 전혀 어려움이 없었다. 하지만 제한사항이 아래와 같아서 시간초과 등의 문제가 있을 것이 분명하긴 했다. 제한사항 1 ≤ queue1의 길이 = queue2의 길이 ≤ 300,000 1 ≤ queue1의 원소, queue2의 원소 ≤ 109 이런 저런 시도를 해본결과 정답케이스를 늘릴 수는 있었지만 모두 해결할 수 없어서 다른 분의 풀이를 보고 참고했다. 시간초과를 줄이기 위해 개선한 부분을 일부 적어보면, // 1. 큐 배열의 합계 업데이트 방식 // 매 반복에서 queue1과 queue2의 합을 업데이트 해주는 부분 // 최초에는 매 반복마다 추출과 삽입 이후 reduce를 써서 q1Sum과 q2Su..

프로그래머스 level 2 - 마법의 엘리베이터(Javascript)

마법의 엘리베이터 배운 것, 유의할 것 배열로만 풀 필요 없다 ㅠㅠ 왜 그런지 모르겠는데 알고르즘 문제는 배열로 푸는게 편하다. 정답만 구하면된다? 라는 생각도 많이 하긴 하는데, 다른 메소드들에 익숙해지지 못하는 경우도 많고 생각의 틀도 닫힌다는 느낌이 들 때도 있다. 그리고 문제에서 주어지는 자료를 가공해서 푸는 경우가 많은데, 현업에서 raw 데이터를 내 입맛대로 가공하면 협업이나 데이터 관리에도 문제가 될 수 있겠다는 생각이 든다… 별도의 공부를 하든 다른 분들의 코드를 참고해서 나의 방식과 비교해서 더 나은 방법을 고민해야겠다. 재귀로 푼 코드 function solution(storey) { if (storey < 5) return storey; const r = storey % 10; con..

프로그래머스 level 2 - 리코쳇 로봇(Javascript)

리코쳇 로봇 배운 것, 유의할 것 그래프 풀이 시 방문 체크 배열 생성 평소에 그래프 문제에서 방문 여부를 체크할 때 이중 배열을 만드는 경우가 많은데, 항상 수동으로 만들어 줬었다. 방문 여부를 체크하는 이중 배열은 그래프의 배열과 사이즈가 같기 때문에 map 메소드를 활용해서 간단하게 만들어봤는데 잘 적용되었다. 기억할 것. // 이중배열의 그래프가 있다면 const board = [[1, 2], [3, 4]]; // 아래와 같이 방문 여부를 나타내는 이중 배열을 만들 수 있다. const visited = board.map(a=>a.map(b=>false)); 배열에서 함수를 담고 꺼내쓰기…? 이번문제는 한칸 이동이 아니라 상하좌우 네 방향으로 쭉 이동하면서 장애물이나 벽을 만나는지를 체크해줘야하고..

프로그래머스 level 3 - 정수 삼각형(Javascript)

정수 삼각형 문제 설명 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. 제한사항 삼각형의 높이는 1 이상 500 이하입니다. 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다. 입출력 예 triangle result 7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5 30 나의 풀이 ..

자바스크립트 - 배열 메소드 정리2

forEach : 배열의 반복 for문이나 for of문이 아니라 forEach를 통한 배열의 반복 방법에 대해 알아본다. forEach메소드는 함수를 인자로 받는다. 인자로 들어가는 함수의 첫번째 인자는 배열의 각각의 원소들을 의미하고, 두번째는 index, 마지막은 해당 배열 자체를 의미하는데 보통 첫번째, 두번째 인자만 사용한다. let arr = ['Mike', 'Tom', 'Jane']; arr.forEach((name, index) => { console.log(`${index}. ${name}`); }); // 0. Mike // 1. Tom // 2. Jane indexOf, lastindexOf : 원소의 index 탐색 indexOf메소드는 인자로 들어가는 값의 index를 반환하는 메..

자바스크립트 2023.10.03

자바스크립트 - 배열 메소드 정리1(splice, slice, concat)

splice splice는 배열의 특정 원소들을 지우는 메소드다. arr.splice(n,m)과 같이 사용했을 때, n번째 index부터 m개의 원소를 지우는 방식으로 작동한다. let arr = [1, 2, 3, 4, 5]; arr.splice(1, 2); console.log(arr); // [1, 4, 5] arr.splice(n,m,x,...)처럼 세개 이상의 인자를 사용해서 해당 위치에 원소를 추가할 수도 있다. let arr = [1, 2, 3, 4, 5]; arr.splice(1, 3, 100, 200); console.log(arr); // [1, 100, 200, 5] 원소를 지우지 않고 추가하는 용도로도 사용할 수 있다. 즉 몇개를 지울지 결정하는 m인자에 반드시 1 이상의 수가 들어가..

자바스크립트 2023.10.03

프로그래머스 - 게임 맵 최단거리(DFS, BFS)

프로그래머스 - 타겟 넘버(DFS, BFS) 나의 풀이 function solution(maps) { // 세로 및 가로 칸의 수 const n = maps.length; const m = maps[0].length; // 상,하,좌,우 탐색 const dx = [-1, 1, 0, 0]; const dy = [0, 0, -1, 1]; const queue =[]; function bfs(startX,startY){ // 시작 지점을 거리 1로 시작 queue.push([startX, startY,1]); // 큐에 원소가 있는 동안 반복 while(queue.length){ // 현재 탐색하는 지점의 좌표와 거리 const [x, y, distance] = queue.shift(); // 현재 탐색지가 ..

프로그래머스 - 카펫(완전탐색)

프로그래머스 - 카펫(완전탐색) 문제 설명 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로 길이는 세로..

프로그래머스 - 모의고사(완전탐색)

문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, … 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, … 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, … 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요...