반응형
브론즈1 랜덤디펜스
문제 설명 : 반에서 3명의 후보에 대해서 n명의 학생들이 투표를 하는데 내가 좋아하는 후보 순으로 3,2,1 점을 각각
줄 수 있다. 가장 점수의 합이 높은 후보가 뽑히고 점수가 높은 후보를 뽑고 점수가 똑같으면 3점이 많은 후보를, 3점 개수도 같으면 2점이 많은 후보를 선출하고 2점 개수도 같으면 0과 최고 점수를 출력한다.
내 코드
import sys
one = []
two = []
three = []
n = int(sys.stdin.readline())
data = [(sys.stdin.readline().strip()).split() for i in range(n)]
for i in data:
one.append(int(i[0]))
two.append(int(i[1]))
three.append(int(i[2]))
a = int(sum(one))
b = int(sum(two))
c = int(sum(three))
li123 = sorted(
[
[a, one.count(3), one.count(2), 1, a],
[b, two.count(3), two.count(2), 2, b],
[c, three.count(3), three.count(2), 3, c],
]
)
li = [a, b, c]
li = sorted(li)
if a > b and a > c:
print(1, sum(one))
elif b > a and b > c:
print(2, sum(two))
elif c > b and c > a:
print(3, sum(three))
else:
if li123[2][1:2] == li123[1][1:2]:
print(0, max([a, b, c]))
else:
print(li123[2][3], li123[2][4])
풀이 : 극한의 조건문으로 풀기에는 조건이 생각보다 많아서 힘들고 여러 원소를 가진 리스트들이 있을때 가장 앞에 있는 원소의 가중치가 가장 크다는 걸 활용해서 후보 x의 총 점수, 3점개수, 2점개수, 1점개수 순으로 리스트에 넣어줘서 sorted 함수를 썼다.
문제 설명 : 문제 설명은 딱히 할게 없다.
내 코드
import sys
n = int(sys.stdin.readline())
data = [(sys.stdin.readline().strip()).split() for i in range(n)]
li = []
li2 = []
dic = {
"A+": 4.3,
"A0": 4.0,
"A-": 3.7,
"B+": 3.3,
"B0": 3.0,
"B-": 2.7,
"C+": 2.3,
"C0": 2.0,
"C-": 1.7,
"D+": 1.3,
"D0": 1.0,
"D-": 0.7,
"F": 0.0,
}
for i in range(n):
li.append(float(data[i][1]))
li2.append(float(data[i][1]) * float(dic[data[i][2]]))
a = round(sum(li2) / ((sum(li))) + 0.000000000001, 2)
print(f"{a:.2f}")
풀이 : dic[data[i][2] 의 형태로 딕셔너리에서 이차원 리스트의 원소값을 찾는 야무진 코드를 짰다.
사실 제일 어려운건 소수점을 2째 자리까지 반올림 하는 거 였는데 round()는 2.5를 2로 처리해버려서 냅다 쓸수는 없었다.
그래서 킹갓 플레 성훈님의 도움으로 마지막 줄 같은 형태로 (2.5여도 3이 되게끔 0.00000001을 2.5에 더해주고 f스트링 사용) 만들었다.
반응형
'WINK-(Web & App) > 개인 스터디 & 프로젝트' 카테고리의 다른 글
알고리즘 2인 스터디 #3주차 - 이총명 (0) | 2023.08.01 |
---|---|
알고리즘 2인 스터디 #2주차 - 박성훈 (1) | 2023.07.25 |
[알고리즘 개인 스터디] 2주차: DP 문제 풀이(11722, 15486) - 윤현승 (0) | 2023.07.22 |
[Node.js & React.js] 인프런 강의 듣기(2) (0) | 2023.07.21 |
알고리즘 2인 스터디 #1주차 - 박성훈 (0) | 2023.07.18 |