문제
https://www.acmicpc.net/problem/20291
여담
문제를 풀고난 뒤, 코드가 깔끔하지 않은 것 같아 다른 풀이들을 참고했다. 해당 블로그에서 엄청 깔끔하게 코드를 짰길래 참고해서 다시 풀었다. 항상 깔끔하게 풀지 못하는 것 같아 조금 아쉽다.. 좀 깔끔하게 푸는 습관을 들이도록 해야지!
풀이
확장명을 구하기 위해 입력받은 문자열을 .
로 split()
한다. split()
한 결과의 첫 번째 문자열은 파일명, 두 번째는 확장명일 것이다. 따라서 필요한 두 번째 문자열만 사용하면 된다.
그 후 과정은 다음과 같다.
- HashMap을 사용해서 입력받은 파일의 확장명이 존재하는지 확인한다.
hashMap.containsKey(file)
- 확장명이 존재하는 경우라면, 파일의 수를 1 증가하여 HashMap에 다시 저장한다.
hashMap.put(file, hashMap.get(file) + 1)
- 확장명이 존재하지 않는 경우라면, HashMap과 `files` 리스트에 확장명을 저장한다.
files
: 확장명을 저장하는 리스트-
hashMap.put(file, 1)
files.add(file)
- 확장명이 저장된 리스트를 사전순으로 정렬한다.
Collections.sort(files)
- 확장명으로 파일의 수를 찾아서 `StringBuilder`에 저장한 후 출력한다.
sb.append(file).append(" ").append(hashMap.get(file)).append("\n")
코드
import java.io.*;
import java.util.*;
public class Main {
static int n;
static HashMap<String, Integer> hashMap = new HashMap<>();
static List<String> files = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String file = br.readLine().split("\\.")[1];
if (hashMap.containsKey(file)) { // 해당 확장명이 이미 저장되어 있는 경우
hashMap.put(file, hashMap.get(file) + 1); // 파일의 개수를 증가한 뒤 넣기
} else {
hashMap.put(file, 1); // 새로 넣기
files.add(file); // 확장명 기록
}
}
Collections.sort(files); // 확장명 사전순으로 정렬
StringBuilder sb = new StringBuilder();
for (String file : files) {
sb.append(file).append(" ").append(hashMap.get(file)).append("\n"); // 확장명으로 파일의 수 찾아서 저장
}
System.out.println(sb);
}
}
'Algorithm > 시뮬레이션' 카테고리의 다른 글
[BOJ] 17276: 배열 돌리기 (JAVA) (0) | 2024.03.27 |
---|---|
[BOJ] 22858: 원상 복구 (small) (JAVA) (1) | 2024.03.26 |
[BOJ] 12933: 오리 (JAVA) (1) | 2024.03.22 |
[BOJ] 1913: 달팽이 (JAVA) (0) | 2024.03.21 |
[BOJ] 20436: ZOAC 3 (JAVA) (0) | 2024.03.20 |