반응형

JavaScript 209

백준 2138 : 전구와 스위치 - javascript(그리디)

문제 출처 https://www.acmicpc.net/problem/2138 정답 풀이 브루트포스와 그리디를 함께 이용한다. 첫번째 스위치를 클릭하는 경우와 클릭하지 않는 경우를 각각 확인한다.  풀이 접근 1. 첫번째 스위치 클릭 기준 :첫번째 전구의 상태를 바꾸면 나머지 전구의 상태도 다르게 변화하기 때문에 이를 기준으로 삼는다.  2. 그리디 :첫번째 스위치 선택 이후에는 두번째부터 차례대로 조작을 결정하여 목표 상태와 맞추어 나간다.  정답 코드 const fs = require('fs');const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');const n = Number(input[0]);const initial = ..

백준 17135 : 캐슬 디펜스 - javascript(완전탐색, dfs, 시뮬레이션)

문제 출처 https://www.acmicpc.net/problem/17135 정답 풀이  simulation 함수는 주어진 궁수 배치에서 적을 제거하는 과정을 시뮬레이션하고, 제거된 적의 수를 반환합니다.combination 함수는 M열 중에서 3개의 궁수 위치를 선택하는 모든 경우의 수를 계산합니다.simulation에서 궁수의 사정거리에 있는 적을 탐색하고, 가장 가까운 적을 우선순위에 따라 공격합니다.시뮬레이션 결과를 바탕으로 궁수 배치 중 적을 가장 많이 제거할 수 있는 경우를 탐색합니다. 정답 코드 const fs = require('fs');const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');const [N, M..

백준 1461 : 도서관 - javascript(그리디)

문제 출처 https://www.acmicpc.net/problem/1461 정답 풀이 - 양수와 음수를 따로 생각해줘야 한다. - 양수 배열과 음수 배열중 가장 절댓값이 큰 값을 나중에 total 에서 빼준다 => 가장 긴 거리를 가고 안돌아오는 것이 이득임. - 절댓값이 큰 책부터 처리해야함  정답 코드 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [n,m] = input[0].split(' ').map(v => +v); const place = input[1].split(' ').map(v => +v)let maxDistance =0; const negatives = place.fil..

백준 14500: 테트로미노 - javascript (완탐, dfs)

문제 출처 https://www.acmicpc.net/problem/14500 정답 풀이 테트로미노 다섯가지 모양을 보면, dfs 탐색으로 커버 가능하다는 것을 알 수 있다. 단, ㅗ 모양 빼고 !  - 따라서 dfs 를 통해 cnt가 4가 될 때까지 탐색하고, - 최대 합을 구한다. - 따로, 'ㅗ','ㅏ',ㅜ'','ㅓ' 모양일 때 전체 합을 구한다. 정답 코드 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [n, m] = input.shift().split(' ').map(v => +v); const graph = input.map(el => el.split(' ').map(v => +v..

백준 2589 : 보물섬 - javascript(bfs)

문제 출처 https://www.acmicpc.net/problem/2589 정답 풀이 최단 거리 ? bfs 알고리즘을 사용하면 된다.  시작점이 어디냐에 따라 최단 거리가 달라지니까, for 이중 반복문을 통해 모든 L을 시작점으로 둔다.  그리고 bfs로 최대로 먼 곳을 갱신해준다. 정답 코드//상하좌우, 육지로 이동 //한 칸 이동 - 한 시간 걸림 //보물 : 최단 거리 이동하는데 , 가장 긴 시간이 걸리는 육지 두곳에 묻혀있음. //bfs 알고리즘 사용 //어디서 시작하냐도 중요해서 전체 L 들어가야함 //bfs로 탐색 후 그때의 max 값 구하기 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');..

백준 16724 : 피리 부는 사나이 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/16724 정답 풀이 아래 그림과 같이 화살표를 무작위로 그려봤을 때, dfs로 탐색을 해서 해당 연결이 끝나는 곳에 safe zone을 두면 되겠다는 아이디어가 떠오른다. 그런데, visited 방문 처리로만 safe zone 을 다루면 안된다.  왜냐하면 파란색 애들은 이미 방문 처리로 끝나고, 주황색 애들이 남아버린다. 원래 같은 한 묶음이 될 수 있는데 ! 어떻게 위와 같은 경우에도 한 묶음으로 만들 수 있을까?  - dfs 반복문을 통해 사이클을 다 돈다.=> visited[x][y] = 2 로 처리해둔다. - 또 아직 방문하지 않은 곳 dfs 반복문으로 돈다. => 현재 돌고 있는 곳은 1로 처리, => 1로 처리하다가 만약 ..

백준 10159 : 저울 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/10159 정답 풀이 cnt1 = 해당 물건 보다 큰 물건의 개수를 센다. cnt2 = 해당 물건 보다 작은 물건의 개수를 센다. 답 = 전체 물건 개수 - cnt1 - cnt2 - 1(자기 자신) 개수를 세는 것은 dfs 탐색을 활용한다. 정답 코드  //무게 다른 물건 //1부터 N 번호 //각 물건에 대해서 그 물건과의 비교 결과를 알 수 없는 물건 개수 출력 //각 관계들을 2차 배열로 생성 및 정리 //dfs로 탐색 //각 숫자로 접근해서 cnt 하기 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')const n = Number(i..

백준 20058 : 마법사 상어와 파이어스톰 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/20058 정답 풀이 1. 그러니까, 주어진 grid를 크기에 따라 나누고 2. 그것을 회전한 후 3. 조건에 따라 얼음 -1 을 한다. 4. reduce 활용하여 모든 얼음의 합 5. dfs를 활용하여 가장 큰 덩어리를 출력  격자 회전 함수는 아래 블로그에 설명했다. https://fordang.tistory.com/352 격자 회전 함수 (90도 회전)1. 기본 개념 - grid : 회전해야 할 격자를 나타내는 2차원 배열- L : 격자를 나누는 단위의 레벨로, 2^L * 2^L 크기의 부분 격자로 나누어 회전한다. - size :  전체 격자의 크기 (size = 2^L)- 격자는 여러fordang.tistory.com 정답 코드..

백준 13904 : 과제 - javascript(그리디)

문제 출처 https://www.acmicpc.net/problem/13904 정답 풀이 마지막 날짜에서 ~ 1일 차까지 계속 최대 점수를 채워준다. - max 값을 채워준다. - 이미 넣은 값은 해당 x - 남은 날을 비교했을 때, 현재 날짜보다 커야한다.  정답 코드 let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const n = Number(input.shift()); input = input.map(el => el.split(' ').map(v => +v))input.sort((a,b) => b[0] - a[0])const visited = new Array(n).fill(false)let an..

백준 16928: 뱀과 사다리 게임 - javascript(bfs)

문제 출처 https://www.acmicpc.net/problem/16928 정답 풀이 베베 꼬아서 생각했던 문제였는데, 사실 간단하다.  기존에는 최대한 사다리를 타고 가게 하면서, 뱀을 피하면서 ~ 아무것도 해당되지 않을 때는 주사위로 이동하면서 ~~ ... 그것이 아니라 queue에다가 현재 위치 = 1주사위 던진 횟수 = 0 을 먼저 넣는다.  그리고 주사위를 돌리는 거다 !! 1부터 6까지 ! 그때의 next position 이 나오는데 => 사다리가 잇다면 next position을 사다리로 이동한 결과를 넣어주고 => 뱀이 있다면 next position을 내려간 이동 결과를 넣어준다.  이를 위해서 사다리와 뱀 좌표는 map 객체로 관리한다.  이걸 계속하다가 위치가 100이상인 점이 나..

반응형