www.acmicpc.net/problem/1302

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

이 문제를 풀고 나서 깨달았다.

어제 라인 코딩테스트의 반례가 여기 있었다는 걸 말이다. ㅠㅠ

 

이 문제는 로직 자체는 쉽지만, "사전순 정렬"을 해본 적이 없다면 주의해야 한다.

나는 java로 string 을 사전 순으로 정렬하는 것을 처음 해봤는데, 어제 LINE 코딩 테스트에 나왔었다.

 

사전 순이면, 

 

ab, a 일 경우에

a 가 먼저 나오고 ab 가 다음에 나온다.

 

나는 단순하게 0번째 문자로만 비교를 했었다. 그렇기 때문에 위의 경우에서 ab, a 가 되어버렸다.

하지만 java의 string 에 훌륭한 메소드가 있었는데, 바로 compareTo 메소드이다.

 

string1.compareTo(string2) 의 리턴 형태는 int 이다.

0일 경우 같은 문자열이고,

음수일 경우 string1 이 사전 순으로 앞이고, 양수일 경우 string2 가 앞이다.

 

이것만 알면 틀릴 리가 없는 문제이다.

 

Source Code

import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Main {
    private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    private static int N;
    private static HashMap<String, Integer> map;
    private static void input() throws IOException {
        N = Integer.parseInt(bufferedReader.readLine());
        map = new HashMap<>();
        for(int i = 0 ; i < N; i++) {
            String bookName = bufferedReader.readLine();
            Integer bookSoldCount = map.get(bookName);
            if(bookSoldCount == null) {
                map.put(bookName, 1);
            } else {
                map.put(bookName, bookSoldCount + 1);
            }
        }
    }

    private static void solve() throws IOException {
        Iterator<String> bookNames = map.keySet().iterator();
        int count = 0;
        String answer = "";
        while(bookNames.hasNext()) {
            String bookName = bookNames.next();
            Integer bookSoldCnt = map.get(bookName);
            if(count < bookSoldCnt) {
                answer = bookName;
                count = bookSoldCnt;
            } else if(count == bookSoldCnt) {
                answer = answer.compareTo(bookName) < 0 ? answer : bookName;
            }
        }
        System.out.println(answer);
    }

    public static void main(String[] args) throws IOException {
        input();
        solve();
    }
}
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기