Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터베이스
- 깃허브
- 브랜치
- 자바스크립트
- 컴퓨터공학
- 파이프라인
- 깃
- 예외처리
- 백준n과 m(2)
- 웹
- 백준n과 m(2)js
- 오픈소스
- Express
- CS
- npm
- 리액트
- 프로그래머스
- 백준n과m(1)js
- post
- js
- Node.js
- 자바
- API
- 타입스크립트
- 좋아요추가
- 리팩토링
- 백준n과m(1)
- gui
- 백준15649번js
- 객체
Archives
- Today
- Total
Nevertheless
[JS] N과 M(2) 본문
https://www.acmicpc.net/problem/15650
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
let [n,m] = input[0].split(" ").map(Number);
function dfs(depth,start,arr){
if(depth == m){
console.log(arr.join(" "));
return;
}
for(let i=start;i<=n;i++){
arr.push(i);
dfs(depth+1,i+1,arr);
arr.pop();
}
}
dfs(0,1,[]);
✏️ 풀이 방법
⁉️ 문제에서 헷갈렸던 부분
Q. 어떤 경우에 visited 를 사용하고 어떤 경우에 사용하지 않는걸까?
핵심은 "중복 선택을 막아야 하는 상황인가?" 이다.
<visited 배열이 필요한 경우>
- 순열처럼 똑같은 원소를 한 번만 써야할 때
: 각 원소의 사용 여부를 체크하기 위해 필요
- 그래프 탐색에서 같은 노드를 재방문하면 안될 때
: 이미 방문한 노드를 다시 방문하지 않도록 visited 로 관리
<visited 배열이 필요하지 않은 경우>
- 중복 선택이 허용되는 경우
- 오름차순 / 내림차순 조합
: 조합 문제에서 이미 선택된 숫자 이후부터만 뽑는 경우, start 인덱스만 조정하면 중복이 없으므로 필요가 없다.
✍🏻 느낀점
뭔가 dfs 의 매개변수가 점점 많아지면서 헷갈리는 것 같다. 오늘 문제에서는 어떨 때는 visited 가 있는 거고, 어떨 때는 없는건지 그게 가장 헷갈리는 부분이었다. 이 문제는 순열(1 2 와 2 1 이 다름) 이 아닌 조합(1 2 와 2 1 이 같음) 문제이기 때문에, start 인덱스를 통해 중복이 자연스럽게 방지돼 visited 가 필요가 없다고 한다. 이런 부분들에 좀 익숙해져야될 것 같다. 퍼플렉시티는 아래와 같이 대답을 해줬다.
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[JS] N과 M(1) (0) | 2025.05.27 |
---|---|
[JS] 백준 14503번: 로봇 청소기 (1) | 2025.05.23 |
[JAVA] 백준 12873번: 기념품 (0) | 2024.05.15 |
[JAVA] 백준 5212번: 지구 온난화 (0) | 2024.05.13 |
[JAVA] 백준 26215번: 눈 치우기 (0) | 2024.05.12 |