All :L
[BOJ/Java] 파일 정리 (20291) 본문
반응형
1. 문제 분석
문제 개요
- 여러 파일의 확장자가 주어질 때, 각 확장자의 종류별로 몇 개의 파일이 있는지 계산하는 문제이다.
- 확장자는 파일 이름 뒤에
.
을 기준으로 나타나며, 이를 통해 파일 종류를 구분할 수 있다.
입력 형식
- 첫 줄에 파일의 개수
N
이 주어진다. - 다음
N
개의 줄에는 각각 파일 이름이 주어진다.
출력 형식
- 확장자 종류별로 파일 개수를 사전순으로 출력한다.
2. 알고리즘 종류
이 문제는 해시맵(HashMap)과 리스트(List)를 이용한 자료 처리 문제로, 확장자를 키(key)로, 파일 개수를 값(value)으로 하여 해시맵에 저장하고, 이를 사전순으로 정렬해 출력하는 방식으로 해결할 수 있다.
3. 주요 부분 및 코드 작성 방법
1. 해시맵 사용
- 확장자별 파일 개수를 저장하기 위해 해시맵을 사용한다.
- 해시맵은 키-값 쌍으로 데이터를 저장하는 자료 구조로, 여기서는 확장자를 키로, 파일 개수를 값으로 저장한다.
2. 사전순 정렬
- 확장자를 저장한 리스트를 사전순으로 정렬한 후, 이를 출력한다.
- 리스트는 순서가 있는 데이터 구조로, 확장자 키를 정렬해 저장하고 이를 반복문으로 출력한다.
4. 코드 설명
메인 함수 (main
)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 파일의 개수 입력
// 확장자와 그 개수를 저장할 해시맵
Map<String, Integer> map = new HashMap<>();
// 확장자 키를 저장할 리스트
List<String> typeList = new ArrayList<>();
// 파일 이름을 읽어와 확장자를 해시맵에 저장
for(int i = 0; i < N; i++) {
// 파일 이름을 '.' 기준으로 나누어 확장자를 추출
StringTokenizer st = new StringTokenizer(br.readLine(), ".");
st.nextToken(); // 파일 이름 부분 무시
String ex = st.nextToken(); // 확장자 추출
// 해시맵에 확장자가 없다면 리스트에 추가
if(!map.containsKey(ex)) typeList.add(ex);
// 확장자별 개수 저장 (기존 값에 +1)
map.put(ex, map.getOrDefault(ex, 0) + 1);
}
// 확장자 리스트를 사전순으로 정렬
Collections.sort(typeList);
// 사전순으로 정렬된 확장자와 그 개수 출력
for(String t : typeList) {
System.out.println(t + " " + map.get(t)); // 확장자와 그 개수 출력
}
}
}
5. 전체 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 파일의 개수 입력
// 확장자와 그 개수를 저장할 해시맵
Map<String, Integer> map = new HashMap<>();
// 확장자 키를 저장할 리스트
List<String> typeList = new ArrayList<>();
// 파일 이름을 읽어와 확장자를 해시맵에 저장
for(int i = 0; i < N; i++) {
// 파일 이름을 '.' 기준으로 나누어 확장자를 추출
StringTokenizer st = new StringTokenizer(br.readLine(), ".");
st.nextToken(); // 파일 이름 부분 무시
String ex = st.nextToken(); // 확장자 추출
// 해시맵에 확장자가 없다면 리스트에 추가
if(!map.containsKey(ex)) typeList.add(ex);
// 확장자별 개수 저장 (기존 값에 +1)
map.put(ex, map.getOrDefault(ex, 0) + 1);
}
// 확장자 리스트를 사전순으로 정렬
Collections.sort(typeList);
// 사전순으로 정렬된 확장자와 그 개수 출력
for(String t : typeList) {
System.out.println(t + " " + map.get(t)); // 확장자와 그 개수 출력
}
}
}
반응형
'CODING > BOJ' 카테고리의 다른 글
[BOJ/Java] 음식물 피하기 (1713) (0) | 2024.08.28 |
---|---|
[BOJ/Java] 듣보잡 (1764) (0) | 2024.08.28 |
[BOJ/Java] 달력 (20207) (0) | 2024.08.28 |
[BOJ/Java] 스택 수열 (1874) (0) | 2024.08.27 |
[BOJ/Java] 괄호의 값 (2504) (0) | 2024.08.26 |
Comments