2023/11 16

프로그래머스 level 2 - 미로 탈출(Javascript)

프로그래머스 level 2 - 미로 탈출 배운 것, 유의할 것 레버를 방문했다가 방문 배열과 큐를 초기화한 후 출구로 가는 것만 생각할 수 있다면 전형적인 그래프 탐색 문제였고, BFS로 어렵지않게 풀 수 있었다. 그렇지만 방문배열과 큐를 초기화하는 과정에서 break 가 아닌 continue 를 쓰는 바람에 한참의 시간을 쏟아버림… 문제의 코드는 상하좌우를 확인하면서 레버를 방문하면 방문배열과 큐를 초기화해주는데, 코드를 짜면서 처음에는 continue를 사용했다. 다음 while문이 시작될 것 처럼 생각했던 것 같다. 그치만 이 때문에 위쪽 통로를 탐색하면서 레버를 발견해서 초기화되면서 '하좌우’에서 통로를 만나면 바로 방문처리를 해버리면서 문제가 발생했었다. for(let i = 0; i < 4; ..

프로그래머스 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)); 배열에서 함수를 담고 꺼내쓰기…? 이번문제는 한칸 이동이 아니라 상하좌우 네 방향으로 쭉 이동하면서 장애물이나 벽을 만나는지를 체크해줘야하고..