dfs

문제https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이이 문제의 경우 문제를 잘못 이해해 시간을 까먹고 햇갈려했던 문제이다.... 내가 부족해서... 이 문제에서 입력되는 데이터의 양을 보고 시간복잡도를 생각하며 굉장히 널널하다는 것을 알 수 있다.각 이모티콘별 적용되는 할인율이 다를 수 있기 때문에 각 할인율의 조합별로 인원이 구매할 것인지 멤버십에 가입할 것인지 판단하면 된다. 최종적으로는 멤버십이 판매액보다 중요시 되기 때문에 주의해야 한..
문제https://school.programmers.co.kr/learn/courses/30/lessons/12952 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이체스의 퀸이 움직일 수 있는 칸의 유형을 보자.퀸이 움직일 수 있는 범위는 4방향의 직선과 4방향의 대각선을 움직일 수 있다. 그렇기 때문에 N-Queen 문제에서는 모든 퀸의 위치에서의 8방향에서 또다른 퀸이 존재하지 않는 경우의 수를 구해야 한다. 위의 설명을 조금 생각해 본다면 한 줄에 하나의 퀸을 놓을 수 있다.(직선에 중복되는 퀸이 있으면 안된다)이 조건을 만족하기 위해서는 가로줄에..
문제https://www.acmicpc.net/problem/19236  풀이하...이 문제 진짜 오래 풀었다....(5시간 정도?) 이 문제는 경우의 수를 따져야 하기에 DFS 문제로 인식을 했다. 물론 맞는 선택이였다. 하지만, 로직 동작이 너무 까다로웠다. 물고기의 방향을 검증하는데 새롭게 정해진 방향을 저장해 다음 depth로 전달해야한다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Number));const dir = [[-1..
문제https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이해당 문제는 DFS를 이용해 모든 조합을 검증해야 하는 문제이다. 코드const solution = (n, computers) => { let answer = 0; const visited = []; const dfs = (idx) => { visited[idx] = true; for (let i = 0; i
문제https://www.acmicpc.net/problem/15684  풀이해당 문제는 dfs를 이용해 풀이했으며 문제의 조건을 구현하는데 조금 어려움이 있었다. 검증하고 있는 칸에 사다리를 놓을 수 있는지 검증하는 로직에서 이중으로 쓸대없이 검증을 진행했어서 시간초과 에러가 발생했었다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Number));const [n, m, h] = input.shift();const ladder = in..
문제https://www.acmicpc.net/problem/14502 풀이이 문제는 BFS를 이용해 풀이했다. 바이러스가 확장되는 모습이 BFS의 인접한 노드를 모두 방문하는 로직과 비슷했기에 BFS를 이용했다. 하지만 벽을 세우는 로직은 DFS와 비슷하다. 모든 빈 공간 중 3 칸에 벽을 세우는 경우를 구현하는데에 DFS와 같은 모습을 갖는 3개의 for 반복문을 이용해 구현했다. 코드const input = require('fs') .readFileSync(process.platform === 'linux' ? '/dev/stdin' : __dirname + '/example.txt') .toString().trim().split('\n').map(e => e.split(' ').map(Numb..