한강에서 호기롭게 2인 코딩을 시도했으나
둘이서 팔다리를 웰던으로 익히고 카페로 도망쳤다.
1546 - 평균
(https://www.acmicpc.net/problem/1546)
문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
그 정성으로 공부를 해 세준아..
- 맞힌 코드 -
1
2
3
4
5
6
7
8
9
10
|
N = int(input()) #과목의 개수를 입력한다.
score = list(map(int,input().split())) #과목별 점수를 score에 리스트로 저장한다.
score.sort(reverse=True) #과목별 점수를 내림차순으로 정리한다.
score_max = score[0]
for i in range(0, N): #과목들을 조작한다.
score[i] = (score[i] / score_max) * 100
print(sum(score)/len(score)) #평균을 출력한다.
|
cs |
판다스에서 사용하던 ascending이랑 reverse랑 헷갈려서 절었었다.
list로 감싸지 않고 map으로 처리한 상태로 내비두면 map인 상태로 있다. (리스트 X)
8958 - OX 퀴즈
(https://www.acmicpc.net/problem/8958)
문제
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
출력
각 테스트 케이스마다 점수를 출력한다.
- 맞힌 코드 -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
T = int(input()) #테스트 케이스를 입력받는다.
streak = 0 #연속 정답변수 선언
ox_score = 0 #점수 총합변수 선언
for _ in range(T): #케이스 갯수만큼 반복한다.
ox_q = input() #입력 받은 문제를 ox_q로 선언한다.
for i in range(len(ox_q)):
if ox_q[i] == 'O': #해당 문제의 O를 쭉 훑는다.
streak += 1 #O를 (연속으로) 만날 때 마다 1점씩 추가된다.
ox_score += streak #그 때마다 스코어에 저장한다.
else:
streak = 0 #X를 만난다면 연속점수를 초기화한다.
print(ox_score) #점수의 총합을 프린트한다.
ox_score = 0
streak = 0 #나머지 변수를 초기화한다.
|
cs |
리스트에 할당해서 split을 이용해서 O 묶음 들을 일일히 처리하고
+
n까지의 합 함수 정의해서 for문으로 돌리려고 생각하고 있었는데,
굳이 그럴 필요가 없고 그냥 문자열로 처리하면 되는 것 아니냐는 말에 바로 수긍했다.
마지막에 streak 초기화를 안 해줘서 절었었다..
4344 - 평균은 넘겠지
(https://www.acmicpc.net/problem/4344)
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
- 맞힌 코드 -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
C = int(input()) #케이스 개수를 입력한다.
score_lst = [] #앞으로 쓸 변수를 선언한다.
score_mean = 0
score_meanstu = 0
for i in range(C): #케이스 갯수만큼 score_lst에 케이스(리스트)를 저장한다.
score_lst = list(map(int,input().split()))
score_mean = sum(score_lst[1:])/(len(score_lst)-1) #첫번째 항은 계산에 필요가 없으므로 슬라이싱 + 한개 빼서 평균을 계산한다.
for i in range(1, len(score_lst)): #만약 저장된 리스트의 값들 중 평균 값을 초과하는 것(학생)이 있다면 stu_meanstu에 카운트한다.
if score_lst[i] > score_mean:
score_meanstu += 1
answer = (round(((score_meanstu) / (len(score_lst)-1)) * 100, 3)) #평균을 초과하는 학생들의 비율을 계산해서 answer에 입력한다(소수점 표기 때문에)
print(f'{answer:.3f}', '%', sep='') #소수점 세자리까지 출력한다.
score_lst = [] #변수들을 초기화해준다.
score_mean = 0
score_meanstu = 0
|
cs |
.pop()을 이용했으면 더 깨끗하게 나왔을 것 같다는 피드백을 받았다.
차근차근 깔끔하게 만들어 봐야지..
다이나믹 프로그래밍 공부하고 있길래, 옆에서 어깨너머로 보고 있었다.
둘 다 코드가 어떻게 굴러가는 건지 왜 이렇게 짠 건지 생각해봤는데
이해는 하겠지만 이렇게 짜라고 하면 못 짤 것 같다고 얘기했다.
딱 기다려~
4번 테마의 7번째까지 총 41개 풀었어.
앞으로 344개의 문제가 남았어. (10.6%)
'PS > BOJ' 카테고리의 다른 글
(백준, 파이썬) 드르렁, 승급 (0) | 2022.06.01 |
---|---|
(백준, 파이썬, 나중에) 한 수 배웠다 (2) | 2022.05.30 |
(백준, 파이썬) 내가 이겼다 + 단계 별 10% 달성 (3) | 2022.05.28 |
(백준, 파이썬) 폼은 일시적이지만 클래스는 어렵다 (2) | 2022.05.27 |
(백준, 파이썬) 새롭지만 어려운 것 (0) | 2022.05.26 |