개발일기

백준 1296번 파이썬 풀이 : 데이트 본문

알고리즘 문제풀이/백준

백준 1296번 파이썬 풀이 : 데이트

한민기 2021. 8. 23. 20:43
반응형

문제 링크 : 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()
= int(input())
max_t, max_i = 00
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 으로 하드코딩을 해 주었다. 하드코딩하면 틀리게 하는 것 같다.

 

반응형
Comments