728x90
20291번 / 파일 정리 |
❓ 파일 정리
🏷️ 관련 주제 : String
Sort
Map

💦 나의 시도
String split()
과 Map
을 이용한 방법
- 입력받을 문자열 개수를 입력 받아 int형으로 변환 후, int
N
에 할당 - 확장자와 개수를 담을 Map<String, Integer>
extensions
를 선언- 키 : 확장자
- 값 : 개수
- 0 ~ (N - 1) 범위를 반복문을 돌면서
extensions
에 확장자와 개수 추가- 확장자를 가져와 String
e
에 할당String e = br.readLine().split(".")[1];
extensions
의 키e
에 대한 값을 1 증가extensions.put(e, extensions.getOrDefault(e, 0) + 1);
- 확장자를 가져와 String
- Stream API를 이용하여
extensions
의 키를 알파벳순으로 오름차순 정렬하여 일차원 String 배열로 변환 후, String[]extensionsKey
에 할당String[] extensionsKey = extensions.keySet().stream().sorted().toArray(String[]::new);
extensionsKey
에서 원소를 하나씩 꺼내BufferedWriter
에 키와 값을 공백으로 구분하여 쓰고 줄바꿈하기BufferedWriter
의close()
메서드 실행하여 결과값 출력하기
💥 ArrayIndexOutOfBoundsException

String의 split()
메서드가 제대로 동작하지 않은 것 같아서
'마침표(.)를 기준으로 문자열 분리할 때에는 마침표(.)만 쓰면 문자를 인식 못하는 건가?'
라는 생각이 들었습니다.
그리고 인터넷 검색 결과split()
메서드 사용 시, 마침표(.)를 기준으로 문자열을 분리하려면 다음과 같은 방법을 사용해야한다는 것을 알게되었습니다.
// 다음 두가지 방법 중 하나를 사용하면 됩니다.
split("\\.");
split("[.]");
그리고 String e = br.readLine().split("\\.")[1];
과 같이 코드를 수정한 결과 성공적으로 제출을 할 수 있었습니다.
📑제출 기록 및 오답 원인

💯 해결 방법
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> extensions = new HashMap<>();
for (int i = 0; i < N; i++) {
String e = br.readLine().split("\\.")[1];
extensions.put(e, extensions.getOrDefault(e, 0) + 1);
}
String[] extensionsKey = extensions.keySet().stream().sorted().toArray(String[]::new);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (String e : extensionsKey) {
bw.write(e + " " + extensions.get(e)+"\n");
}
bw.close();
}
}
🏷️ 문제 풀면서 참고한 블로그
728x90