반응형

알고리즘 문제 풀기 243

백준15683 : 감시 - javascript(백트리킹,좋은문제)

문제 출처https://www.acmicpc.net/problem/15683 정답 풀이 다른 분의 코드를 참고했다.. !좋은 문제다. 정답 코드const [nums, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const [n,m] = nums.split(' ').map(v => +v); let board = arr.map(el => el.split(' ').map(v => +v));const dir = [[-1,0],[0,1],[1, 0],[0,-1]]const dirType = [0,[0], [0,2], [0,1], [0,1,2], [0,1,2,3]]const cctv = []; let minSize..

백준 9663: N-Queen - javascript(백트래킹) //좋은 문제

문제 출처 https://www.acmicpc.net/problem/9663 정답 풀이 N-Queen 문제에서 체스 큐칙은 아래와 같다. - 퀸은 한행, 한 열에 하나씩만 놓을 수 있다. - 서로 같은 대각선상에 있으면 안된다.  아래 그림에서 빨간 부분은 피해서 다음 퀸을 놓아야 한다는 뜻 ! 가로나 세로는 피할 수 있겠고, 대각선은 어떻게 피할 수 있을까?  먼저 대각선 방향은 두개를 생각해줘야 한다. - 오른쪽 대각선 밑으로. - 왼쪽 대각선 밑으로.  먼저 왼쪽 대각선 밑 방향 좌표들의 공통점은?=> x좌표와 y좌표의 합이 같다 !!!  n=4일 때 x좌표 + y좌표의 합의 - 최솟값은 0이고  - 최댓값은 n*2-2 이다. 이를 배열로 표현하면 let diag1 = new Array(n*2-1)..

백준 15649 : N과 M(1) - javascript(백트래킹)

문제 출처 https://www.acmicpc.net/problem/15649 정답 풀이  흠, 사실 백트래킹을 연습하고 싶어서 풀었는데 흔히 알고 있는 재귀를 활용한 순열 구하기 문제였다.  정답 코드const [n,m] = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ').map(v => +v); function solution(n,m){ let checked = new Array(n+1).fill(false); function backTracking(L, total){ if(L === m){ console.log(total.slice(1)) return; ..

백준 1013 : Contact - javascript(문자열, 정규식)

문제 출처https://www.acmicpc.net/problem/1013 정답 풀이 - 정규식을 이용한 문자열을 판별해야겠다는 생각을 했다. - ^는 문자열의 시작을, $는 문자열의 끝을 의미한다. 이로써 문자열이 패턴과 완전히 일치하는지 확인할 수 있다. - |로 패턴 `100+1+`와 `01`을 선택적으로 매칭하고, 이를 반복해서 사용할 수 있도록 `+`를 사용한다.  정답 코드 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n'); const n = Number(input.shift()); function solution(n, input){ for(let i=0; i

백준 2293: 동전 1 - javascript(dp)

문제 출처 https://www.acmicpc.net/problem/2293 정답 풀이 주의 : js로는 메모리 초과가 난다.  아래와 같이 2차원 그래프를 만들어줄 것이다. 세로 줄에는 동전의 가치 가로 줄에는 가치의 합이다. 그리고 각 그래프 안에는 해당 동전과 이전 동전으로 해당 합을 만들 수 있는 경우의 수를 구할 것이다.  우리는 저 빨간 부분을 return 해주면 된다.    아래 같은 경우에는 1 동전으로 1의 가치를 만들 수 있는 경우의 수는 1이다. (1 동전 1개)1 동전으로 8의 가치를 만들 수 있는 경우의 수는 8이다. (1 동전 8개)  그리고 아래와 2동전으로 가치의 합의 경우의 수를 구할 때, 가치의 합 2부터 생각해주면 된다. 왜냐하면 동전 2로는 가치 1을 만들 수 없기 때..

백준 1167: 트리의 지름 - javascript(dfs)

문제 출처 https://www.acmicpc.net/problem/1167 정답 힌트 1. 임의의 노드에서 가장 먼 노드를 찾는다. 2. 해당 노드에서 또 먼 노드를 찾고 그때의 거리가 트리의 지름이 된다. 정답 코드 const sol = (input) => { const N = +input[0]; input = input.slice(1) const tree = Array.from({length: N+1}, () => new Array()); input.map((str) => { const [node, ...nextInfo] = str.split(" ").map(Number); for(let i=0; i 0); let max ={node..

프로그래머스: [PCCP 기출문제] 2번 퍼즐 게임 챌린지- javascript(이진탐색)

문제 출처 정답 풀이 어제 pccp 풀었을 때 lv1 문제를 무슨 한시간 동안 풀어서 좀 절망적이였는데 그래도 오늘 lv1, lv2는 각각 30분씩 시간이 들었다. 오늘 하루는 조금 나한테 위로가 되는 날이다. 항상 드는 생각이 문제가 복잡하게 느껴져도 단순할 것이다 계속 세뇌를 하며 예제를 보면서 실제로 단순화 해야 한다. 이번 문제는 그렇게 풀었다.  그리고, 문제를 풀고 틀렸어도 당황하지 말고, console.log를 통해 어떤 부분이 틀린건지 유추하면서 고쳐나가면 된다. 사실 그게 진짜 코딩테스트다.  만약 맞았다면, 어떻게 효율성을 더 챙길 수 있을까? 고민해야 한다.  이번 문제는 효율성을 생각해줘야 했다. 아래는 내가 문제 풀기전에 주석처리로 문제를 정리한 부분이다.  //효율성?//숙련도를..

프로그래머스: [PCCP 기출문제] 1번 동영상 재생기 - javascript(단순 구현)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/340213 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 정답 풀이 단순 구현 문제이고, commands 반복문이 끝난 시간에도 오프닝 구간인지 확인해주는 것 정도만 신경써주면 된다. 정답 코드 function solution(video_len, pos, op_start, op_end, commands) { pos = transTime(pos) video_len = transTime(video_len) op_start = tra..

프로그래머스: [PCCP 기출 문제] 석유 시추 - javascript(bfs 효율성)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr정답 풀이 처음 풀이는 효율성에서 틀린 점수를 받았다. 아래 방식으로 풀었는데, 아무래도 checked를 가로 이동할 때마다 초기화하면서, 똑같은 곳을 bfs로 또 탐색 하게 코드를 작성했기 때문이다.  따라서, 미리 주어진 그래프로 석유가 있는 곳을 저장해놨다. 해당 위치는 1번땅이야 ~ 2번땅이야 ~ 3번땅이야 ~ 이것을 dp 그래프로 저장해놨다. - 예를 들어 dp[0][2] = 1 ..

백준 14725: 개미굴 - javascript(문자열, 트리)

문제 출처 https://www.acmicpc.net/problem/14725 정답 풀이 문자열 문제를 풀고 싶었는데, 어쩌다 보니 트리 알고리즘을 연습하게 됐다. 뭐, 잘됐다. 트리 문제는 한번 풀어본 것 같다..;; (아무래도 양심이 없다)  트리 문제는 언제나 간단하게 생각하면 된다. - 트리를 어떻게 생성할까? - 트리를 어떻게 탐색할까?  이 두개만 생각해주면 된다.그러다 보니, 아래와 solution 함수가 쉬워진다. 생성은 insert 를 통해, 탐색은 print를 통해 구현하면 된다.   ## insert path는 문제에서 주어진 값이 차례대로 들어갈 것이다. 2 B A4 A B C D2 A C 내 전체 코드를 보면, 앞에 숫자는 slice(1)를 통해 없앴고, 배열로 구현해놨다. 아래와..

반응형