Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SDK
- 코딩애플
- 운영체제와 정보기술의 원리
- recoverability
- 데이터베이스
- 커널 동기화
- CPU 스케줄링
- 프로세스 주소 공간
- 갤럭시 S24
- SQL
- 시스템프로그래밍
- 개발남노씨
- 인터럽트
- 온디바이스AI
- B tree 데이터삽입
- 쉬운코드
- Extendable hashing
- 김영한
- vite
- 백엔드
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- 시그널 핸들러
- 운영체제
- 쉬운 코드
- 코딩테스트 [ ALL IN ONE ]
- 트랜잭션
- Git
- concurrency control
- 반효경
- 네트워크
Archives
- Today
- Total
티끌모아 태산
1296: 팀 이름 정하기 본문
728x90
설명
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다.
이환이가 만든 공식은 사용하려면 먼저 다음 4가지 변수의 값을 계산해야 한다.
- L = 연두의 이름과 팀 이름에서 등장하는 L의 개수
- O = 연두의 이름과 팀 이름에서 등장하는 O의 개수
- V = 연두의 이름과 팀 이름에서 등장하는 V의 개수
- E = 연두의 이름과 팀 이름에서 등장하는 E의 개수
그 다음, 위에서 구한 변수를 다음 식에 입력하면 팀 이름의 우승할 확률을 구할 수 있다.
((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100
연두의 영어 이름과 팀 이름 후보 N개가 주어졌을 때, 우승할 확률이 가장 높은 팀 이름을 구해보자. 확률이 가장 높은 팀이 여러가지인 경우 사전 순으로 가장 앞서는 팀 이름이 우승할 확률이 가장 높은 것이다.
핵심 아이디어
- 주어진 조건대로 구현하면 되는 문제다.
- mod == %
코드 구현
Python
# 연두의 영어 이름
name = input().upper()
# 팀 이름 후보 수
n = int(input())
# 팀 이름을 저장할 배열
team_list = []
for _ in range(n):
team_name = input().upper()
team_list.append(team_name)
team_list.sort() # 사전 순 정렬
# 확률값을 저장할 배열
result = []
for i in range(n):
# L O V E의 각각의 개수를 찾자.
L = name.count("L") + team_list[i].count("L")
O = name.count("O") + team_list[i].count("O")
V = name.count("V") + team_list[i].count("V")
E = name.count("E") + team_list[i].count("E")
# 공식
p = ((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E)) % 100
result.append(p)
# 우승 확률이 가장 높은 팀 이름 출력
print(team_list[result.index(max(result))].upper())
C++
#include <iostream>
#include <set>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
string name;
int n;
vector<string> t_name;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> name;
cin >> n;
for (int i = 0; i < n; i++) {
string team_name;
cin >> team_name;
t_name.push_back(team_name);
}
// 사전 출력을 위해 정렬
sort(t_name.begin(), t_name.end());
// 이제 우승확률을 구해보자
int max_value = 0; int max_index = 0;
for (int i = 0; i < n; i++) {
int L = 0, O = 0, V = 0, E = 0;
string temp = "";
temp = name + t_name[i];
for (int i = 0; i < temp.length(); i++) {
if (temp[i] == 'L') L++;
else if (temp[i] == 'O') O++;
else if (temp[i] == 'V') V++;
else if (temp[i] == 'E') E++;
}
// 각 L O V E 의 개수를 구한 후 우승 확률 구하기
int p;
p = ((L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E)) % 100;
if (max_value < p) {
max_value = p;
max_index = i;
}
}
// 모든 팀에 대한 반복이 끝난 후 우승확률이 가장 높은 팀 출력
// 대문자 출력
cout << t_name[max_index] << "";
}
728x90
'백준 문제 > LG전자 준비' 카테고리의 다른 글
⭐⭐2559: 수열 (0) | 2024.04.23 |
---|---|
⭐1463: 1로 만들기 (0) | 2024.04.06 |