< 백준 1546 >  ✅


문제 :

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 
일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 
그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 돼 71.43점이 된다. 
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.



두 번째 시도만에 풀었다. 

< 내 코드 > 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
N = int(input())

#점수가 든 리스트 s 만들기
s = list(map(int, input().split())) 
highest_score = sorted(s)[-1]

#새로운 점수가 들어갈 리스트 new_s
new_s = []
for score in s:
    new_s.append((score/highest_score)*100)
    
avg = sum(new_s)/len(new_s)

# "%.2f"% 로 소수점 둘째 자리까지 출력
print("%.2f"%avg) 

코드 마지막 줄에서 "%.2f"% 를 써서 소수점 둘째 자리수까지 출력하도록 했다.

채점 결과 맞다고는 뜨는데 이해가 잘 안 된다. 위 코드로는 66.666667 같이 소수점 여섯 자리수까지 출력이 안 되는데 왜 맞은걸까? 맞고도 찝찝하다.


궁금한 점 1 :

문제에 '절대과의 절대/상대 오차는 10^-2까지 허용한다'라는 부분이 이해가 되지 않아 무시하고 풀었는데도 맞았다고 나온다. 무시해도 되는건가..?

궁금한 점 2:

첫째 줄에서 과목의 개수 N이 주어지는데, 그러면 둘째 줄에서 입력받는 점수들의 개수도 N개만큼 받아야 한다. 하지만 위에서 내가 짠 (제출 결과 '정답'인 코드는) 원하는대로 마음껏 점수를 입력할 수 있다. 엄연히 말해 문제가 요구하는 바를 정확히 구현하지 못한 코드인 것이다. 그런데도 왜 맞다고 뜨는걸까? 



< 백준 18406 >  ✅

문제가 길어보이지만 읽어보면 간단하다.

어떤 게임의 아웃복서 캐릭터에게는 럭키 스트레이트라는 기술이 존재한다. 이 기술은 매우 강력한 대신에 항상 사용할 수는 없으며, 현재 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다.
특정 조건이란 현재 캐릭터의 점수를 N이라고 할 때 점수 N을 자릿수를 기준으로 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 예를 들어 현재 점수가 123,402라면 왼쪽 부분의 각 자릿수의 합은 1+2+3, 오른쪽 부분의 각 자릿수의 합은 4+0+2이므로 두 합이 6으로 동일하여 럭키 스트레이트를 사용할 수 있다.
현재 점수 N이 주어졌을 때, 럭키 스트레이트를 사용할 수 있는 상태인지 아닌지를 알려주는 프로그램을 작성하시오. 럭키 스트레이트를 사용할 수 있다면 "LUCKY"를, 사용할 수 없다면 "READY"라는 단어를 출력한다. 또한 점수 N의 자릿수는 항상 짝수 형태로만 주어진다. 예를 들어 자릿수가 5인 12,345와 같은 수는 입력으로 들어오지 않는다.



< 내 코드 >


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
N = input()  #문자열로 다룰 것이므로 int()를 하지 않는다. 
lengh = len(N)
left_score = 0
right_score = 0

for i in range(0, lengh):
    if i < lengh/2 : 
        left_score += int(N[i]) # 여기에서 정수형으로 바꿔준다 
    elif i >= lengh/2 :
        right_score += int(N[i])

if left_score == right_score :
    print("LUCKY")
elif left_score != right_score :
    print("READY")

< SM의 코드 >


1
2
3
4
5
6
number = input()

if sum([int(i) for i in number[:int(len(number)/2)]]) == sum([int(i) for i in number[int(len(number)/2):]]):
    print('LUCKY')
else:
    print('READY')

SM은 리스트 컴프리에이션을 이용해서 훨씬 콤팩트한 코드를 짰다.