반응형
문제 출처
https://www.acmicpc.net/problem/10974
문제
N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.
출력
첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.
예제 입력 1 복사
3
예제 출력 1 복사
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
문제 풀이 힌트
재귀함수를 이용해서 풀어보자 !
nums가 "123"일 때, 호출을 3번 해야 한다.
1) 1을 빼는 거 => nums가 "23"이 됐을 때, 호출을 2번 해야 한다. 1) 2를 빼는거 2) 3을 빼는 거 => temp는 123이 된다. 그리고 temp는 132가 된다. (뒤에서부터 쌓인 함수를 진행시켜야 하기 때문에)
2) 2를 빼는 거 => nums가 "13"이 됐을 때, 호출을 2번 해야 한다. 1) 1을 빼는거 2) 3을 빼는 거 => temp는 213이 된다. 그리고 temp는 231이 된다.
3) 3을 빼는 거 => nums가 "12"이 됐을 때, 호출을 2번 해야 한다. 1) 1을 빼는거 2) 2을 빼는 거 => temp는 312이 된다. 그리고 temp는 321이 된다.
문제 풀이 코드
const input = require('fs').readFileSync('/dev/stdin').toString().trim()
const N = Number(input);
let answer = [];
function solution(nums, temp){ //nums에서 알맞은 수를 빼서 temp에 나열 시킬 것
if(nums === "") answer.push(temp.split("").join(" ")); //temp 나열 시킨 수를 ex) "123" => ["1", "2", "3"] => "1 2 3" 이렇게 만든 후 push
else {
for(let i=0; i<nums.length; i++){
solution(nums.slice(0,i) + nums.slice(i+1), temp + nums[i]) //i번째 순서에 있는 수를 nums에서 빼서 temp에 넣는 코드임
}
}
}
let nums = "";
for(let i=1; i<=N; i++) nums += i; // N이 3일 때 nums = "123"
solution(nums, "") //nums에서 각각 수를 빼서 ""(temp)에다가 한 줄의 순서가 완성되면 answer 배열에다가 push 할 것임
console.log(answer.join("\n")) //배열에 들어가 있는 각 temp를 각각 띄어쓰기를 하면서 문자열로 생성
Only 문제 코드
const input = require('fs').readFileSync('/dev/stdin').toString().trim()
const N = Number(input);
let answer = [];
function solution(nums, temp){
if(nums === "") answer.push(temp.split("").join(" "));
else {
for(let i=0; i<nums.length; i++){
solution(nums.slice(0,i) + nums.slice(i+1), temp + nums[i])
}
}
}
let nums = "";
for(let i=1; i<=N; i++) nums += i;
solution(nums, "")
console.log(answer.join("\n"))
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
백준 24480: 알고리즘 수업 - 깊이 우선 탐색2 - javascript(dfs) (0) | 2024.02.15 |
---|---|
백준 1449: 수리공 항승 - javascript(그리디) (0) | 2024.02.14 |
백준 1213: 팰린드롬 만들기 - javascript(구현) (0) | 2024.02.12 |
백준 16173: 점프왕 쩰리 - javascript(bfs) (1) | 2024.02.11 |
백준 1388: 바닥 장식 - javascript(이중 for문, dfs) (1) | 2024.02.08 |