[BOJ] 백준 5568. 카드놓기

2024. 4. 21. 12:25· Java/BOJ

문제

https://www.acmicpc.net/problem/5568

 

5568번: 카드 놓기

예제 1의 경우 상근이는 11, 12, 21, 112, 121, 122, 212를 만들 수 있다.

www.acmicpc.net


풀이

순열과 Set 자료구조를 통해 해결했습니다. 

 

 우선 N개의 카드 중 K개의 카드를 순서를 고려하여 뽑아야하기 때문에, 순열 백트래킹을 통해 selected[] 배열에 인덱스를 저장합니다. 그리고 card[] 배열에 대입하여 해당하는 카드 번호들을 뽑아냅니다. 이때 번호의 나열은 StringBuilder를 이용해 합치고 그 결과를 Set에 집어넣습니다.

 

 Set은 중복을 허용하지 않는 자료구조입니다. 그렇기 때문에 Set의 size를 구하면 중복되지 않은 경우의 수가 나오게 됩니다.

 

 아래는 소스 코드입니다.


소스코드

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class B5568_카드놓기 {

    static int N,K;
    static int[] cards;
    static int[] selected;
    static boolean[] visited;
    static Set<String> set = new HashSet<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        K = sc.nextInt();
        cards = new int[N];
        visited = new boolean[N];
        selected = new int[N];
        for(int i = 0;i<N;i++){
            cards[i] = sc.nextInt();
        }
        perm(0);
        System.out.println(set.size());
    }

    static void perm(int idx){
        if(idx==K){
            StringBuilder sb = new StringBuilder();
            for(int i = 0;i<K;i++) {
                sb.append(cards[selected[i]]);
            }
            set.add(sb.toString());
        }
        else{
            for(int i = 0;i<N;i++){
                if(!visited[i]){
                    visited[i] = true;
                    selected[idx] = i;
                    perm(idx+1);
                    visited[i] = false;
                }
            }
        }
    }
}

'Java > BOJ' 카테고리의 다른 글

[BOJ] 백준 21610. 마법사 상어와 비바라기  (0) 2024.04.29
[BOJ] 백준 1240. 노드사이의 거리  (0) 2024.04.26
[BOJ] 백준 1863. 스카이라인 쉬운거  (0) 2024.04.18
[BOJ] 백준 1202. 보석도둑  (0) 2024.04.10
[BOJ] 백준 11437. LCA  (0) 2024.04.08
'Java/BOJ' 카테고리의 다른 글
  • [BOJ] 백준 21610. 마법사 상어와 비바라기
  • [BOJ] 백준 1240. 노드사이의 거리
  • [BOJ] 백준 1863. 스카이라인 쉬운거
  • [BOJ] 백준 1202. 보석도둑
동구름이
동구름이
동구름이
동구름
동구름이
전체
오늘
어제
  • 분류 전체보기 (178)
    • Java (63)
      • Java 를 파헤쳐보자 (13)
      • BOJ (45)
      • 프로그래머스 (3)
      • SWEA (1)
      • Java GUI (1)
    • JavaScript (17)
      • JS를 파헤쳐보자 (7)
      • 프로그래머스 (7)
      • JS 학습 정리 (1)
    • Backend (33)
      • Spring (3)
      • HTTP (7)
      • 프로젝트 (10)
      • MySQL (6)
      • Redis (3)
      • Elastic Search (1)
      • 인증, 인가 (3)
    • CS (57)
      • 운영체제 (35)
      • Network (22)
    • Git (2)
    • 개발 관련 이것저것 (2)
    • etc (1)
    • 독서 (0)
    • 사설 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스택
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • BOJ
  • 큐
  • 네트워크
  • 자바
  • 인프런
  • 김영한
  • 이석복
  • Java
  • 자바스크립트
  • 반효경
  • 한양대
  • 운영체제
  • 레디스
  • 구현
  • 프로그래머스
  • OS
  • JCF
  • 백준

최근 글

hELLO · Designed By 정상우.v4.2.2
동구름이
[BOJ] 백준 5568. 카드놓기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.