danbibibi
article thumbnail

문제

문제 바로가기> BOJ 10597번: 순열장난

 

10597번: 순열장난

kriii는 1부터 N까지의 수로 이루어진 순열을 파일로 저장해 놓았다. 모든 수는 10진수로 이루어져 있고, 모두 공백으로 분리되어 있다. 그런데 sujin이 그 파일의 모든 공백을 지워버렸다! kriii가 순

www.acmicpc.net

 

풀이

 

1 ≤ N ≤ 50이므로, 수를 한개  또는 두개 씩 잘라가며, 순열을 만들어 본다!

이 때, 이미 사용한 수, 수열의 범위를 넘어서는 수의 경우는 더 이상 탐색해 볼 필요가 없다.

 

C++

#include<iostream>
#include<vector>
#define MAX 51
using namespace std;

int N, len;
vector<int> v;
bool isuse[MAX];

void solution(string seq){
    if(seq == "") {
        for(int i=0; i<v.size(); i++) cout << v[i] << " ";
        exit(0); // 종료 조건
    }

    int num;
    for(int i=1; i<=2; i++){
        num = stoi(seq.substr(0, i));
        if(num<=len && !isuse[num]){
            isuse[num] = true;
            v.push_back(num);
            solution(seq.substr(i, seq.size()-i));
            isuse[num] = false;
            v.pop_back();
        }
        if(seq.size() == i) break;
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    string seq; cin >> seq;
    len = seq.size();
    if(len>9) len -= (len-9)/2;
    solution(seq);
}

 

Java

import java.io.*;
import java.util.*;

public class Main {
	
	static int N, len;
	static boolean[] isuse;
	static List<Integer> nums = new ArrayList<>();
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String seq = br.readLine();
		len = seq.length();
		if(len>9) len-=(len-9)/2;
		isuse = new boolean[len+1];
		solution(seq);
		br.close();
	}

	private static void solution(String seq) {
		if(seq.equals("")) {
			for(int i=0; i<len; i++) System.out.print(nums.get(i) + " ");
			System.exit(0);
		}
		
	    int num = 0;
	    for(int i=1; i<=2; i++){
	        num = Integer.parseInt(seq.substring(0, i));
	        if(num<=len && !isuse[num]){
	            isuse[num] = true;
	            nums.add(num);
	            solution(seq.substring(i));
	            isuse[num] = false;
	            nums.remove(nums.size()-1);
	        }
	        if(seq.length() == i) break;
	    }
	}
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 2098번: 외판원 순회  (0) 2023.02.19
BOJ 2042번: 구간 합 구하기  (0) 2023.02.17
BOJ 1655번: 가운데를 말해요  (0) 2023.02.16
BOJ 9663번: N-Queen  (0) 2023.02.16
BOJ 2023번: 신기한 소수  (0) 2023.02.14
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로