일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 빅데이터
- 리눅스마스터 2급 2차
- 기초
- 엘라스틱서치
- 오라클
- 문제풀이
- 필기
- 프로그래밍
- 코딩테스트
- 백준
- 데이터베이스
- 스프링
- c언어
- 파이썬
- 토이프로젝트
- 알고리즘
- 문법
- SQL
- SQL 정리
- 프로그래머스
- 이클립스
- 스파크
- 데이터프로그래밍
- 스프링부트
- 위클리챌린지
- 자바
- 해킹실습
- SQL 문법
- 모의해킹
- MySQL
- Today
- Total
개발일기
백준 1296번 파이썬 풀이 : 데이트 본문
문제 링크 : https://www.acmicpc.net/problem/1296
1296번: 데이트
첫째 줄에 오민식의 영어 이름이 주어진다. 둘째 줄에는 좋아하는 여자가 몇 명인지 N이 주어지고, 셋째 줄부터 N개의 줄에 여자의 이름이 하나 씩 주어진다. N은 50보다 작거나 같고, 모든 이름은
www.acmicpc.net
문제
오민식은 자기가 좋아하는 여자 N명 중에 한 명과 함께 데이트하러 나가고 싶어한다.
하지만 N명 모두를 사랑하는 오민식에게는 한 명을 선택하고 나머지 여자를 버리는 것은 슬픈 결정이기 때문에 누구를 선택해야 할지 고민에 빠졌다.
마침 오민식은 사랑계산기를 얻었다. 사랑계산기는 두 사람의 이름을 이용해서 두 사람이 성공할 확률을 계산해 준다. 사랑계산기는 다음과 같이 작동한다.
- L = 두 사람 이름에서 등장하는 L의 개수
- O = 두 사람 이름에서 등장하는 O의 개수
- V = 두 사람 이름에서 등장하는 V의 개수
- E = 두 사람 이름에서 등장하는 E의 개수
위의 개수를 모두 계산 한 후에 확률 계산은 다음과 같이 한다.
((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E)) mod 100
오민식의 영어 이름과 나머지 여자들의 이름이 주어졌을 때, 오민식과 성공할 확률이 가장 높은 여자의 이름을 출력하는 프로그램을 작성하시오. 여러명일 때에는 알파벳으로 가장 앞서는 이름을 출력하면 된다.
입력
첫째 줄에 오민식의 영어 이름이 주어진다. 둘째 줄에는 좋아하는 여자가 몇 명인지 N이 주어지고, 셋째 줄부터 N개의 줄에 여자의 이름이 하나 씩 주어진다. N은 50보다 작거나 같고, 모든 이름은 알파벳 대문자로만 구성되어 있고 모두 길어야 20글자이다.
출력
오민식이 선택한 여자의 이름을 출력한다.
# 문제 풀이
# 이 문제는 단순 구현 문제이다.
# check 함수를 구현했다. 남자의 이름과 여자의 이름을 계산한 결과가 리턴되는 함수이다.
1
2
3
4
5
6
|
def check(boy_name, girl_name):
l = boy_name.count("L") + girl_name.count("L")
o = boy_name.count("O") + girl_name.count("O")
v = boy_name.count("V") + girl_name.count("V")
e = boy_name.count("E") + girl_name.count("E")
return (l + o) * (l + v) * (l + e) * (o + v) * (o + e) * (v + e) % 100
|
cs |
# 그다음 최대값의 변수를 지정하여 check 함수의 리턴값이 최대면 바로 해당 인덱스를 저장, 반복문이 종료되고
# 해당 인덱스를 출력한다. 여기서 동일 숫자일 경우 문자열이 먼저 나오는 여성의 이름을 출력해야 하기 때문에
# 배열 지정시 sorted 를 먼저 실행해 준다.
1
2
3
4
5
6
7
8
9
10
|
name = input()
n = int(input())
max_t, max_i = 0, 0
girl_name = sorted([input() for _ in range(n)])
for i in range(n):
temp = check(name, girl_name[i])
if max_t < temp:
max_t = temp
max_i = i
print(girl_name[max_i])
|
cs |
여기서 문제점이 있다. 문제에서는 오민식의 영어 이름이 input 된다고 나와 있어
check 함수에서 boy_name으로 입력 값을 넣어준 것이 아닌 오민식의 영어이름에서 미리 L,O,V,E 의 개수를 구해
0, 1, 0, 0 으로 하드코딩을 해 주었다. 하드코딩하면 틀리게 하는 것 같다.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 1225번 파이썬 문제풀이 : 이상한 곱셈 (0) | 2021.08.28 |
---|---|
백준 1012번 파이썬 풀이 : 유기농 배추 (6) | 2021.08.24 |
백준 1003번 파이썬 풀이 : 피보나치 함수 (3) | 2021.08.22 |
백준 1764번 파이썬 풀이 : 듣보잡 (4) | 2021.08.20 |
백준 1312번 파이썬 풀이 : 소수 (0) | 2021.08.19 |