어흥

[백준 22232] 가희와 파일 탐색기 (Java) 본문

알고리즘/백준

[백준 22232] 가희와 파일 탐색기 (Java)

라이언납시오 2022. 3. 21. 20:34
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/22232

 

22232번: 가희와 파일 탐색기

첫 번째 줄에 jo_test 폴더에 있는 파일 개수 N과 가희가 설치한 OS에서 인식하는 파일 확장자의 개수 M이 공백으로 구분되어 주어집니다. 2번째 줄부터 N+1번째 줄까지 FILENAME.EXTENSION 형식의 문자열

www.acmicpc.net

1. 주의할 점

- 정렬 순서를 정리한다

- OS에서 인식하는 확장자인지 구분할 수 있는 방법을 생각한다

 

2. 구현

- List에 파일명들을 저장한다

- HashSet에 OS에서 인식하는 확장자명을 삽입한다

- List에 저장된 파일명들을 불러와서 파일명, 확장자명, OS에서 인식여부를 구하고 우선순위큐에 삽입한다

- 우선순위큐의 정렬 기준은 설명에 적힌 그대로 적용한다

- 우선순위큐에서 원소 1개씩 뽑아내며 출력한다

 

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

class Main {
    static class Info implements Comparable<Info>{
        String front,back;
        int inSet;
        
        public Info(String front, String back, int inSet){
            this.front=front;
            this.back=back;
            this.inSet=inSet;
        }
        
        @Override
        public int compareTo(Info o){
            if(this.front.equals(o.front)){
                if(this.inSet==o.inSet){
                    return this.back.compareTo(o.back);
                }
                return Integer.compare(o.inSet,this.inSet);
            }
            return this.front.compareTo(o.front);
        }
    }
    
	public static void main (String[] args) throws java.lang.Exception {
	    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	    StringTokenizer st = new StringTokenizer(br.readLine());
	    int a = Integer.parseInt(st.nextToken());
	    int b = Integer.parseInt(st.nextToken());
	    
	    //초기화
	    List<String> li = new ArrayList<>();
	    HashSet<String> set = new HashSet<>();
	    
	    for(int i=0;i<a;i++){
	        String str = br.readLine();
	        li.add(str);
	    }
	    for(int i=0;i<b;i++){
	        String str = br.readLine();
	        set.add(str);
	    }
	    PriorityQueue<Info> pq = new PriorityQueue<>();
	    
	    for(int i=0;i<a;i++){
	        st = new StringTokenizer(li.get(i),".");
	        String front = st.nextToken();
	        String back = st.nextToken();
	        int flag = set.contains(back) ? 1 : 0;
	        pq.offer(new Info(front,back,flag));
	    }
	    while(!pq.isEmpty()){
	        Info ii = pq.poll();
	        System.out.println(ii.front+"."+ii.back);
	    }
	}
}
728x90
반응형
Comments