728x90

qjs

 

문제설명

입력 & 출력

나의 풀이

 

이번 문제는 간단하게 파일을 확장자까지 입력받고 확장자 별로 몇 개가 있는지 구분하는 문제입니다. 그리고 확장자의 개수가 아닌 확장자를 사전순으로 정렬하여 출력하면 되는 문제입니다.

 

사전순 출력 == 오름차순 출력

"apple", "banana", "cat", "dog",...

 

문제를 딱 보면 HashSet을 사용하기에 적합합니다. 먼저 빠른 입력을 위해 BufferedReader클래스를 사용하여 입력을 받아주고, 확장자를 구분하기 위해서 StringTokenizer를 사용하여 token별로 구분해 줍니다.

 

이때 split() 메서드를 사용하여 '.'을 기준으로 분리해 줍니다. 

"\\."은 정규표현식에서 사용되는 패턴입니다.

이 표현은 백슬래시(\)로 점(.)을 이스케이프(escape) 한 것이며, 정규표현식에서 점(.)은 어떤 문자 하나를 의미하는 메타문자입니다. 따라서 파일명에서 확장자를 구분하기 위해 점(.)을 구분자로 사용하려면 이스케이프 처리를 해야 합니다.

 

그리고 HashMap에 getOrDefault() 메서드를 사용하여 키(key)로 저장된 값(value)을 가져와서, 기존 값이 없으면 기본값인 0을 사용하고, 기존 값이 있으면 기존 값에 1을 더한 후 다시 map에 저장합니다.

 

이는 해당 확장자가 몇 번 등장했는지를 세는 용도로 사용될 수 있습니다.

 

  • map.entrySet(). stream()
    •  map의 각 엔트리(entry)를 스트림으로 변환합니다. 각 엔트리는 키(key)와 값(value)의 쌍으로 구성됩니다.
  • . sorted((e1, e2) -> e1.getKey(). compareTo(e2.getKey()))
    • 스트림을 정렬합니다.
    • 여기서 e1과 e2는 Map.Entry <String, Integer> 타입의 객체입니다.
    • getKey() 메서드를 사용하여 엔트리의 키(key)를 비교하고, compareTo() 메서드를 사용하여 오름차순으로 정렬합니다. 따라서 키(key)를 사전순으로 정렬됩니다.
  • . forEach(el -> System.out.println(el.getKey() + " " + el.getValue()))
    •  정렬된 각 엔트리에 대해 출력합니다.
    • el.getKey()는 엔트리의 키(key)를 반환하고, el.getValue()는 해당 키에 대응하는 값(value)을 반환합니다. 이들을 문자열로 조합하여 출력합니다.

 

 

다른 풀이✅

 

다른 풀이에서는 "나의 풀이"와 비슷한 맥락이지만, Stream을 사용하지 않고 keySet() 메서드를 사용하여 key들을 가져오고, list로 변환한 후 Collections의 sort() 메서드를 사용하여 오름차순(디폴트 값)으로 정렬합니다.

 

마지막으로 list를 반복문으로 순회하여 출력하여 마무리했습니다.

 

 

 

속도는 keySet()을 사용한 코드가 더 빠릅니다.

 

 

참고❗️

 

[JAVA] 입출력, BufferedReader, StringTokenizer, StringBuilder 알아보기

Java로 코딩테스트를 보거나 입력을 사용해야 할 때 Scanner 클래스를 사용하면 편리하지만 속도가 느리다는 단점이 있습니다. 그렇기 때문에 속도가 빠른 BufferReader 클래스를 사용을 하면 시간복

pixx.tistory.com

 

 

[JAVA] HashMap 이란 ❓ (1/2)

Java에서 데이터를 효율적으로 저장하고 빠르게 검색하기 위해 다양한 컬렉션 클래스가 제공됩니다. 그중에서도 HashMap은 키-값 쌍을 저장하고 관리하는 데 있어 매우 유용한 데이터 구조

pixx.tistory.com

 

[JAVA] HashMap_entrySet() : 데이터 접근과 반복을 간편하게 하는 방법(2/2)

Java를 활용하다 보면 종종 데이터를 매핑하는 작업이 필요한 경우가 있습니다.  특히 맵(Map)을 사용할 때는 맵에 저장된 모든 엔트리(키-값 쌍)에 접근하는 것이 중요합니다.  이때 유용하게 사

pixx.tistory.com

 

[JAVA] ArrayList 알아보기 (동적 배열)

Java에서는 기본적으로 여러 데이터를 다룰 때 배열을 사용합니다. 그러나 배열은 정적이므로, 한 번 생성되면 크기를 변경할 수 없습니다. 배열은 처리할 데이터의 개수가 정해진 경우에 유용

pixx.tistory.com