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 |