티스토리 뷰
문제
문제는 N이 주어지고 N명의 학생이 듣는 5개의 수업이 주어진다. 이 때 한 명의 학생은 한 가지의 '수업 조합'을 갖게 된다. ex) 100 101 102 103 488을 듣는 학생은 {100,101,102,103,488}의 '수업 조합'을 갖게 된다. (문제에서 수업의 듣는 순서는 중요하지 않다.)
이 때 어떤 하나의 '수업 조합'이 몇 명의 학생에게서 나오는가를 popularity라 정의하자. 예를 들어 문제의 첫 sample input에서 {100,101,102,103,488}의 popularity는 2이다.
이 때 most popular, 즉 popularity가 가장 큰 수업을 듣는 학생의 수를 구하시오.
풀이) 나는 그냥 어떤 수업의 조합별로 그 수업이 나온 빈도를 체크한다음에 최대인 수업조합의 빈도수를 모두 더하는 방식을 택했다. 그 과정에서 C++ STL MAP(AVL GRAPH)을 이용했다. (key-Data구조가 필요하기 때문에)
이 때 map의 key는 수업조합이고 Data는 수업조합이 나온 횟수(frequency)이다. 코드는 다음과 같다.
#include<iostream>
#include <cstdio>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int main() {
int n,max_freq = 1,input,sum=0;
int A[5];
char buf[20];
while (cin >> n&&n) {
//initiallize
map<string, int> freqmap;
//input part
for (int i = 0; i < n; i++) {
string sequence;
scanf("%d %d %d %d %d", &A[0], &A[1], &A[2], &A[3], &A[4]);
sort(A, A + 5);
sprintf(buf, "%d%d%d%d%d", A[0], A[1], A[2], A[3], A[4]);
sequence = buf;
freqmap[sequence]++;
}
// find max_freq
max_freq = 0;
sum = 0;
for (map<string, int>::iterator it = freqmap.begin(); it != freqmap.end(); it++) {
if (it->second > max_freq) max_freq = it->second, sum=0;
if (it->second == max_freq) sum += max_freq;
}
cout << sum << endl;
}
return 0;
}
위의 코드에서는 scanf로받고 sprinf로 string에 쑤셔넣었는데 사실 처음 코드에서는 for문 돌려가면서 string에 하나씩 push_back()을 했었다. 그런데 그렇게 하니까 logic은 동일한데도 WA판정이 계속 나왔다. 아마 그래서 sprinf가 뭔가 차이점이었던 것 같은데 그 부분을 다른 사람의 github에서 보고 따서 적용해봤더니 AC판정이 바로 났다. (무슨 차이인지 아직도 모르겠다) 앞으로는 애매해지면 input part는 ANSI C표준을 따라서 해보는 것도 괜찮을 것 같다.
(참고했던 github code: https://github.com/morris821028/UVa/blob/master/volume112/11286%20-%20Conformity%5BMap%5D.cpp)
'기초 알고리즘 문제 풀이' 카테고리의 다른 글
23. UVa-978 Lemmings Battle! //multiset (0) | 2020.02.23 |
---|---|
22. UVa-11572 Unique Snowflakes (0) | 2020.02.22 |
20. UVa-1062 (0) | 2020.02.22 |
19. UVa-11988 Broken Keyboard // Unique linked list problem (0) | 2020.02.21 |
18. Uva-11933 Splitting Numbers (0) | 2020.02.21 |
- Total
- Today
- Yesterday
- Neural Network
- 매트랩 함수
- 순환 신경망
- 신호 및 시스템
- 머신러닝
- 사진구조
- Andrew ng
- ML
- 매트랩
- 머신 러닝
- rnn
- 이미지
- 신경망
- 딥러닝
- 자연어 처리
- 영상구조
- CS
- Logistic Regression
- 컴퓨터 과학
- gradient descent
- 인덱스 이미지
- NLP
- 연속 신호
- RGB이미지
- 컴퓨터과학
- 이산 신호
- CNN
- 영상처리
- 이미지처리
- 밑바닥부터 시작하는 딥러닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |