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