BOJ::1302 베스트 셀러

https://www.acmicpc.net/problem/1302


String,Integer 를 클래스로 만들어서 하나의 리스트에 저장한후 Comparable을 이용하면 훨씬 깔끔할거 같은데 잘 못하겠다.


JAVA


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
 
class Main{
    
    static int n;
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n=Integer.parseInt(br.readLine());
        ArrayList<String> words = new ArrayList();
        ArrayList<String> res = new ArrayList();
        int[] nums = new int[1001];
        int max=0;
        
        //단어는 words, 빈도수는 nums 에 저장
        for(int i = 0 ; i < n ; i++){
            String s = br.readLine();
            if(!words.contains(s)){
                words.add(s);
            }
            int idx=words.indexOf(s);
            nums[idx]++;
            
            if(max < nums[idx]){
                max = nums[idx];
            }
        }
        
        //빈도수가 가장 높은것들만 res에 저장
        for(int i = 0 ; i < n ; i++){
            if(nums[i]==max){
                res.add(words.get(i));
            }
        }
        //res 사전순으로 정렬
        Collections.sort(res);
        System.out.println(res.get(0));
    }
}
cs


C++


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
vector<string> words;
string res[1001];
int nums[1001];
int n;
 
bool contain(vector<string> words, string key) {
    vector<string>::iterator it;
    it = words.begin();
    for (it; it != words.end(); it++) {
        if (*it == key) {
            return true;
        }
    }
    return false;
}
 
int indexOf(vector<string> words, string key) {
    int n = words.size();
    for (int i = 0; i < n; i++) {
        if (words.at(i) == key) {
            return i;
        }
    }
    return -1;
}
 
int main() {
    cin >> n;
    int max = 0;
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        if (!contain(words, s)) {
            words.push_back(s);
        }
        int idx = indexOf(words, s);
        nums[idx]++;
        if (max < nums[idx]) {
            max = nums[idx];
        }
    }
 
    n = words.size();
    int idx = 0;
    for (int i = 0; i < n; i++) {
        if (nums[i] == max) {
            res[idx] = words.at(i);
            idx++;
        }
    }
 
    //사전순 맨앞을 res[0]으로
    for (int i = 0; i < idx; i++) {
        if (res[i] < res[0]) {
            res[0= res[i];
        }
    }
 
    cout << res[0<< endl;
}
cs


'BOJ::문제풀이' 카테고리의 다른 글

1325 효율적인 해킹  (0) 2017.12.31
1309 동물원  (0) 2017.12.31
1260 DFS와 BFS  (0) 2017.12.31
1157 이상한 곱셈  (0) 2017.12.30
1157 단어 공부  (0) 2017.12.30

+ Recent posts