본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 6443 애너그램

by 까망 하르방 2021. 2. 20.
반응형

출처: https://www.acmicpc.net/problem/6443

 Input 

2

abc

acba

  

 Output 

abc

acb

bac

bca

cab

cba

aabc

aacb

abac

abca

acab

acba

baac

baca

bcaa

caab

caba

cbaa

 

중복을 제거해서 순열을 구하는 문제입니다.


DFS 이용한 코드

#include <iostream>
#include<string>
using namespace std;
 
int N, len, alphabet[26];
string str;
char output[1001];
 
void DFS(int idx, int depth) {
    if (depth == len) {
        cout << output << '\n';
        return;
    }
 
    for (int i = 0; i < 26; i++) {
        if (alphabet[i] > 0) {
            alphabet[i]--;
            output[depth] = 'a' + i;
            DFS(i, depth + 1);
            alphabet[i]++;
        }
    }
}
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    while(N--){
        for (int i = 0; i < 26; i++)
            alphabet[i] = 0;
        
        cin >> str;
        len = str.length();
        for (int i = 0; i < len; i++) {
            alphabet[str[i] - 'a']++;
        }
 
        DFS(0, 0);
    }
}

 

STL::next_permutation() 이용

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
 
bool cmp(char a, char b){
    return a < b;
}
 
int N;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    while(N--){
        char str[105] = {0, };
        cin >> str;
        int len = strlen(str);
        sort(str, str + len);
        
        do{
            printf("%s\n", str);
        } while (next_permutation(str, str + len, cmp));
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1920 수 찾기  (0) 2021.02.20
[BOJ] 백준 4153 직각삼각형  (0) 2021.02.20
[BOJ] 백준 2456 나는 학급회장이다.  (0) 2021.02.20
[BOJ] 백준 1395 스위치  (0) 2021.02.19
[BOJ] 백준 2573 빙산  (0) 2021.02.18

댓글