< 백준 1546 > ✅
문제 :
코드 마지막 줄에서 "%.2f"% 를 써서 소수점 둘째 자리수까지 출력하도록 했다.
채점 결과 맞다고는 뜨는데 이해가 잘 안 된다. 위 코드로는 66.666667 같이 소수점 여섯 자리수까지 출력이 안 되는데 왜 맞은걸까? 맞고도 찝찝하다.
궁금한 점 1 :
문제에 '절대과의 절대/상대 오차는 10^-2까지 허용한다'라는 부분이 이해가 되지 않아 무시하고 풀었는데도 맞았다고 나온다. 무시해도 되는건가..?
궁금한 점 2:
첫째 줄에서 과목의 개수 N이 주어지는데, 그러면 둘째 줄에서 입력받는 점수들의 개수도 N개만큼 받아야 한다. 하지만 위에서 내가 짠 (제출 결과 '정답'인 코드는) 원하는대로 마음껏 점수를 입력할 수 있다. 엄연히 말해 문제가 요구하는 바를 정확히 구현하지 못한 코드인 것이다. 그런데도 왜 맞다고 뜨는걸까?
< 백준 18406 > ✅
문제가 길어보이지만 읽어보면 간단하다.
< 내 코드 >
< SM의 코드 >
SM은 리스트 컴프리에이션을 이용해서 훨씬 콤팩트한 코드를 짰다.
문제 :
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다.
일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 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은 리스트 컴프리에이션을 이용해서 훨씬 콤팩트한 코드를 짰다.
0 Comments
Post a Comment