본문 바로가기

백준

1302번: 베스트셀러(Java)

 

 HashMap을 써서 제목과 입력 횟수를 저장하고 keySet을 순환하면서 최대로 입력받는 제목을 구함과 동시에 사전순으로 제일 빠른 제목을 찾았다.

 

 

 

 우선 HashMap을 써서 제목을 입력받을 때마다 몇 번 입력받았는지 Value에 저장했다. 

Scanner scanner = new Scanner(System.in);
String title;
HashMap<String, Integer> list = new HashMap<>();
int n = scanner.nextInt();
int max = 1;
String result;

for(int i = 0; i<n; i++)
{
    title = scanner.next();
    list.put(title, list.containsKey(title) ? list.get(title) + 1 : 1);
}

 

 

이렇게 하면 Key에 제목이 저장되고 Value에 입력 횟수가 저장된다.

 

 

 

다음으로 for문을 써서 keySet을 돌면서 가장 많이 입력된 제목들 중 사전순으로 가장 빠른 제목을 찾았다.

for(String i : list.keySet())
{
    if(list.get(i) > max)
    {
        result = i;
        max = list.get(i);
    }
    else if(list.get(i) == max && i.compareTo(result) < 0)
    {
        result = i;
    }
}

 

 입력받은 횟수가 max 보다 크면 result와 max 값을 해당하는 값으로 바꿔주고, 입력받은 횟수가 max와 같으면 result만 해당 값으로 바꿔준다.

 

 

 

 

결과 코드

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        String title;
        HashMap<String, Integer> list = new HashMap<>();
        int n = scanner.nextInt();
        int max = 1;
        String result;

        for(int i = 0; i<n; i++)
        {
            title = scanner.next();
            list.put(title, list.containsKey(title) ? list.get(title) + 1 : 1);
        }

        result = list.keySet().toArray()[0].toString();

        for(String i : list.keySet())
        {
            if(list.get(i) > max)
            {
                result = i;
                max = list.get(i);
            }
            else if(list.get(i) == max && i.compareTo(result) < 0)
            {
                result = i;
            }
        }
        System.out.println(result);
    }
}

'백준' 카테고리의 다른 글

1927번:최소 힙(Java)  (0) 2023.02.20
11286번:절댓값 힙(Java)  (0) 2023.02.20
1158번: 요세푸스 문제(Java)  (0) 2023.02.16
11399번: ATM(Java)  (0) 2023.02.12
1406번: 에디터(Java)  (0) 2023.02.07