https://www.acmicpc.net/problem/1296
단순히 입력받은 문자에서 L, O, V, E의 갯수를 센 후 사랑 구하기 공식에 적용하면 되는 문제였다.
남자의 L, O, V, E의 갯수를 센 후 새로운 여자의 L, O, V, E의 값을 더하여 공식에 적용한다.
결과값이 같다면 여자의 이름에서 부등호를 이용하여 앞에 있는 글자가 빠른 경우를 저장하게 하였다.
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main() {
string ans; //정답
string oh; //남자이름
string girl; //여자이름
int omat[4] = { 0, }; //남자이름에서 LOVE찾기, 0번지 : L, 1번지 : O, 2번지 : V, 3번지 : E
int gmat[4] = { 0, }; //여자이름에서 LOVE찾기, 0번지 : L, 1번지 : O, 2번지 : V, 3번지 : E
int L, O, V, E; // L의 갯수, O의 갯수, V의 갯수, E의 갯수
int big = -1; //mod100 중 가장 큰 값을 저장할 공간
int n; //입력할 횟수
int check; //mod100을 한 결과
//남자 이름 입력받은 후 L, O, V, E 찾기
cin >> oh;
for (int i = 0; i < oh.size(); i++) {
if (oh[i] == 'L') {
omat[0]++;
}
else if (oh[i] == 'O') {
omat[1]++;
}
else if (oh[i] == 'V') {
omat[2]++;
}
else if (oh[i] == 'E') {
omat[3]++;
}
}
cin >> n;
//여자 이름 입력받은 후 L, O, V, E 찾기
while (n--) {
cin >> girl;
for (int i = 0; i < girl.size(); i++) {
if (girl[i] == 'L') {
gmat[0]++;
}
else if (girl[i] == 'O') {
gmat[1]++;
}
else if (girl[i] == 'V') {
gmat[2]++;
}
else if (girl[i] == 'E') {
gmat[3]++;
}
}
//L, O, V, E의 횟수 찾기
L = omat[0] + gmat[0];
O = omat[1] + gmat[1];
V = omat[2] + gmat[2];
E = omat[3] + gmat[3];
//사랑 구하기 공식에 적용하기
check = (L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E);
check = check % 100;
//사랑 구하기 공식에 결과값을 비교
if (big < check) { //현재 계산한 결과가 크면 갱신
big = check;
ans = girl;
}
else if (big == check) { //현재 계산한 결과와 이전에 계산한 결과가 같으면
if (ans > girl) { //이름순으로 비교 후 앞에 있는 이름이면
ans = girl; //앞에 이름을 답으로 지정
}
}
memset(gmat, 0, sizeof(gmat)); //여자 L, O, V, E 결과 초기화
}
cout << ans;
}
'백준' 카테고리의 다른 글
백준1371 - 가장 많은 글자 (0) | 2019.07.15 |
---|---|
백준1431 - 시리얼 번호 (0) | 2019.07.15 |
백준1956 - 운동 (0) | 2019.07.08 |
백준4963 - 섬의 개수 (0) | 2019.07.07 |
백준1966 - 프린터 큐 (0) | 2019.07.06 |