-
문제
https://www.acmicpc.net/problem/10972
10972번: 다음 순열
첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.
www.acmicpc.net
How to Solve ?
[1] 브루트포스
1. 주어진 길이의 순열을 백트래킹을 통해 만든다
function dfs(cnt) { if (cnt === n) { permuArr.push(output.join("")); return; } for (let i = 1; i <= n; i++) { if (visited[i]) continue; visited[i] = 1; output.push(i); dfs(cnt + 1); output.pop(); visited[i] = 0; } }
2. 만든 배열을 돈다.
만약 찾고자 하는 수가 마지막 위치에 있다면 -1 을 출력하고, 그게 아니라면 다음 값을 출력해준다.
function solve() { const index = permuArr.indexOf(target); if (index == permuArr.length - 1) { return -1; } else { return permuArr[index + 1].split("").join(" "); } }
전체코드
function dfs(cnt) { if (cnt === n) { permuArr.push(output.join("")); return; } for (let i = 1; i <= n; i++) { if (visited[i]) continue; visited[i] = 1; output.push(i); dfs(cnt + 1); output.pop(); visited[i] = 0; } } function solve() { const index = permuArr.indexOf(target); if (index == permuArr.length - 1) { return -1; } else { return permuArr[index + 1].split("").join(" "); } } const n = 4; const permuArr = []; const output = []; const visited = Array(n).fill(0); const nums = Array.from({ length: n }, (v, i) => i + 1); const target = "1234"; dfs(0); console.log(solve());
'PS > 백준' 카테고리의 다른 글
[백준_10971] 외판원 순회2 ( 브루트포스 - 완전탐색 ) (0) 2021.06.16 [백준-10819] 차이를 최대로 ( 브루트포스 - 자바스크립트 ) (0) 2021.06.16 [백준_1107] 리모컨 ( 브루트포스 - 자바스크립트 ) (0) 2021.06.15 [백준_3085] 사탕게임 ( 브루트포스 - 자바스크립트 ) (0) 2021.06.15 [백준_1699] 제곱수의 합 ( DP - 자바스크립트 ) (0) 2021.06.15 댓글