완전 탐색

알고리즘 연습

[알고리즘 연습] 백준 2503 (숫자 야구, 자바스크립트)

문제 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 풀이 시간복잡도가 최악의 경우 약 9 * 9 * 9 * 100 * 3 * 3으로 충분히 완전 탐색으로 풀 수 있었다. 세자리 숫자 중 중복이 존재하는 경우에는 해당 숫자는 확인하지 않고 넘어갔다. 해당 문자의 스트라이크와 볼을 구하는 과정에서 indexOf를 사용했다. check 변수를 통해 모든 조건이 만족하는 경우에 answer 값을 +1 증가시켰다. 소스 코드 const filePath = process.platform === "linux" ? "/d..

알고리즘 연습

[알고리즘 연습] 백준 16937 (두 스티커, 자바스크립트)

문제 16937번: 두 스티커 첫째 줄에 모눈종이의 크기 H, W, 둘째 줄에 스티커의 수 N이 주어진다. 다음 N개의 줄에는 스티커의 크기 Ri, Ci가 주어진다. www.acmicpc.net 풀이 전체 스티커의 갯수와 상관없이 2개의 스티커만 붙이면 되기 때문에 이중 for문을 사용했다. 두 스티커는 4가지 케이스로 붙여질 수 있다. (기본, 기본), (기본, 90도 회전), (90도 회전, 기본), (90도 회전, 90도 회전) 각 케이스마다 두 스티커를 가로와 세로 모두 연결할 수 있다. 가로로 연결한 경우 너비는 더하기가 되고 높이는 최댓값이 된다. 반면, 세로로 연결한 경우 너비는 최댓값이 되고 높이는 더하기가 된다. 소스 코드 const filePath = process.platform ==..

알고리즘 연습

[알고리즘 연습] 백준 14501 (퇴사, 자바스크립트)

문제 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 N의 최댓값이 15이기 때문에 조합 알고리즘을 활용해 구현했다. 마땅한 브레이크 포인트가 없기 때문에 dfs를 한 번 돌 때마다 계속 최댓값을 갱신한다. (N + 1까지 요일이 지나지 않는 경우가 존재) 선택한 상담의 T을 더해가며 dfs를 수행하고 지금까지 더해진 day를 다음 dfs의 시작점으로 지정한다. 이익을 구할 때는 정해진 기간 안에 진행할 수 있는 상담의 금액만 더한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .read..

알고리즘 연습

[알고리즘 연습] 백준 18808 (스티커 붙이기, 자바스크립트)

문제 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net 풀이 시간복잡도가 40 * 40 * 100 * 4 으로 충분히 완전 탐색으로 풀 수 있는 문제였다. 노트북와 스티커를 비교할 때 스티커가 노트북의 범위를 벗어나지 않도록 범위를 지정해준다. 스티커의 값도 1이고 노트북의 값도 1이면 해당 위치에 스티커를 붙일 수 없다. 스티커의 세로의 길이와 가로의 길이가 다를 수 있기 때문에 회전 시 세로의 길이와 가로의 길이를 스왑해준다. 소스 코드 const filePath = process.platform === "li..

알고리즘 연습

[알고리즘 연습] 백준 16508 (전공책, 자바스크립트)

문제 16508번: 전공책 곧 졸업을 앞둔 민호는 대학교 생활 동안 구매만 해놓고 한 번도 펴보지 않은 전공책에 먼지가 쌓여 있는 것을 보고는, 이 책들을 어떻게 처리해야 할지 고민 중이다. 열심히 고민한 끝에 민호는 www.acmicpc.net 풀이 N과 W의 범위가 크지 않다고 생각해서 조합 알고리즘을 통해 구현했고 다행히 시간초과가 발생하지 않았다. 하나의 전공서적 이름의 문자를 탐색하여 찾는 단어가 있으면 제거하고 다음 dfs로 이동한다. 단어의 모든 문자가 제거된 경우 최소 가격을 갱신하고 dfs를 종료한다. 자바스크립트에서 배열은 참조값이라서 원본 배열을 훼손시키지 않기 위해 깊은 복사를 수행했다. 소스 코드 const filePath = process.platform === "linux" ?..

알고리즘 연습

[알고리즘 연습] 백준 15661 (링크와 스타트, 자바스크립트)

문제 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 풀이 N이 최대 20이라 팀이 될 수 있는 모든 조합을 완전 탐색으로 풀 수 있을까 걱정했는데 완전 탐색으로 풀 수 있는게 신기했다. dfs의 인수로 전달되는 cnt를 하나의 직원의 번호로 생각하여 구현했다. dfs를 한번 돌릴 때 해당 직원이 스타트 팀(true)과 링크 팀(false)가 되는 경우를 모두 수행했다. 하나의 팀에 0명 있는 경우를 예외 처리해주지 않은 이유는 그 때의 값은 최솟값이 될 수 없기 때..

산본개발자
'완전 탐색' 태그의 글 목록