팡세영
Log sey
팡세영
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • PS (45)
      • programmers (13)
      • 백준 (29)
    • Android (16)
    • Daily (0)
    • Kotlin (6)
    • Design Pattern (1)
    • Java (1)
    • Flutter (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이분탐색
  • Kotlin
  • programmers #프로그래머스
  • 완전탐색
  • 프로그래머스
  • 정렬
  • 코틀린
  • 구현
  • 골드
  • 해쉬맵
  • TestCode
  • 의존성 주입
  • compose
  • Android
  • CustomView
  • BFS
  • 실버
  • 자바
  • java
  • programmers
  • 백준
  • mvvm
  • DFS
  • 안드로이드
  • ArcitecturePattern
  • 문자열
  • LEVEL2
  • 하단네비게이션바
  • binding
  • flutter

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
팡세영

Log sey

백준 - 문자열 집합 조합하기 25328
PS/백준

백준 - 문자열 집합 조합하기 25328

2023. 3. 3. 23:34


[문제 해결]

  • 문자열 X, Y, Z 에서 K개를 선택해 나온 조합에서 같은 문자열이 2개 이상 나온 문자열을 출력하는 문제
  • X, Y, Z 조합을 구하면서 HashMap을 이용해 문자열이 나온 빈도수를 기록한다.
  • 빈도수가 2 이상인 문자열들을 오름차순 출력

[Java]

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

public class Main {
    static HashMap<String, Integer> map = new HashMap<>();

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String x = br.readLine();
        String y = br.readLine();
        String z = br.readLine();

        char xArr[] = x.toCharArray();
        char yArr[] = y.toCharArray();
        char zArr[] = z.toCharArray();

        int k = Integer.parseInt(br.readLine());

        combination(xArr, new boolean[xArr.length], 0, k);
        combination(yArr, new boolean[yArr.length], 0, k);
        combination(zArr, new boolean[zArr.length], 0, k);


        ArrayList<String> list = new ArrayList<>();
        for(String key : map.keySet()){
            if(map.get(key) >= 2){
                list.add(key);
            }
        }

        if(list.size() == 0){
            System.out.println(-1);
            return;
        }

        Collections.sort(list);

        for(String ans : list) System.out.println(ans);

    }

    public static void combination(char arr[], boolean visited[], int start, int r){
        if(r == 0){
            StringBuilder sb = new StringBuilder("");

            for(int i=0; i<arr.length; i++)
                if(visited[i]) sb.append(arr[i]);

            String key = sb.toString();
            map.put(key, map.getOrDefault(key, 0) + 1);

            return;
        }

        for(int i=start; i<arr.length; i++){
            if(!visited[i]){
                visited[i] = true;
                combination(arr, visited, i + 1, r - 1);
                visited[i] = false;
            }
        }
    }
}




'PS > 백준' 카테고리의 다른 글

백준 - 친구비 16562  (1) 2023.03.08
백준 - 연속합 1912 java  (0) 2023.03.06
백준 - 캠프 준비 16938  (0) 2023.03.01
[백준] - 도영이가 만든 맛있는 음식 2691  (0) 2023.02.28
[백준] - Australian Voting (호주식 투표법) 4419  (0) 2023.02.13
    'PS/백준' 카테고리의 다른 글
    • 백준 - 친구비 16562
    • 백준 - 연속합 1912 java
    • 백준 - 캠프 준비 16938
    • [백준] - 도영이가 만든 맛있는 음식 2691
    팡세영
    팡세영
    Android, CS, PS

    티스토리툴바