이 문제를 풀고 나서 깨달았다.
어제 라인 코딩테스트의 반례가 여기 있었다는 걸 말이다. ㅠㅠ
이 문제는 로직 자체는 쉽지만, "사전순 정렬"을 해본 적이 없다면 주의해야 한다.
나는 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();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 1600번 : 말이 되고픈 원숭이 풀이 ( Java ) - BFS (0) | 2021.03.24 |
---|---|
백준 1149번 : RGB 거리 풀이 (Java) - DP (0) | 2021.03.23 |
백준 14889번 : 스타트와 링크 풀이 (Java) (0) | 2021.03.17 |
백준 16236번 : 아기 상어 풀이(Java) (0) | 2021.03.17 |
백준 1759번 : 암호 만들기 풀이 및 Java 로 순열, 조합, 부분집합 만들기 (0) | 2021.03.16 |
최근댓글