[Python] 백준 - 8958번 : OX퀴즈, 4344번 : 평균은 넘겠지

ossap·2021년 12월 22일
0

백준 단계별로 문제풀기

원래 순서없이 주어지는 문제 4개를 풀다가,
실력이 비슷한 분들과 함께 백준 '단계별로 문제풀기'를 순서대로 풀어 보기로 했습니다.
이미 이전에 혼자 공부하며 진행한 부분이 있어, 5단계부터 진행했습니다.

문제 목록
1. 8958번 : OX퀴즈
2. 4344번 : 평균은 넘겠지

5단계 : 1차원 배열

6. 8958번 : OX퀴즈

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.


출력

각 테스트 케이스마다 점수를 출력한다.


🙋‍♀️ 내코드

import sys
num = int(input())
OX_line = []
for _ in range(num):
    OX_line.append(sys.stdin.readline().strip().split('X'))
for OX in OX_line:
    sum = 0
    for i in OX:
        n = len(i)
        sum += ((n**2)+n)/2 #삼각수 공식
    print(int(sum))

🤔 더 짧게 줄여보자 !

import sys
OX_line = [list(map(str,sys.stdin.readline().strip().split('X'))) for _ in range(int(input()))]
for OX in OX_line:
    sum = 0
    for i in OX:
        n = len(i)
        sum += ((n**2)+n)/2 #삼각수 공식
    print(int(sum))

   # 더 빠르진않음 ㅠ 

여기서 이렇게 더 짧게 줄여 나가는 과정에서 2번째 줄인

OX_line = [list(map(str,sys.stdin.readline().strip().split('X'))) for _ in range(int(input()))]


이 부분!!! 정말 잘 쓰고싶었는데 매번 좀 헷갈렸습니다.. 그러나 반복에는 장사 없다고 드디어 한 번만에 안틀리고 사용했습니다! 이제 감이 오는 것 같슴다 😆



7. 4344번 : 평균은 넘겠지

문제

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.


입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.


출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

🙋‍♀️ 내코드

import sys
for _ in range(int(input())):
    all = list(map(int,sys.stdin.readline().split()))
    avg = sum(all[1:])/all[0]
    count = 0
    for score in all[1:] :
        if score > avg:
            count += 1
    print(f'{((count/all[0])*100):.3f}%')
  

문제는 앞이 아니라 뒤였다..
포맷 공부 제대로 할 것!!
print('%.3f' %rate,'%')
라고 썼음... 과거의 잘못...무엇인가...
>>> %rate 다음에 ',' 콤마로 연결하는게 아니라 +로 연결해야했다.
print('%.3f' %rate+'%') 로 하니까 성공..

🧑‍💻 다른사람 코드

  
  import sys
for _ in range(int(sys.stdin.readline())):
    a = list(map(int,sys.stdin.readline().strip().split()))
    mean = sum(a[1:len(a)])/a[0]
    print('%.3f'%round(sum(map(lambda x:x>mean, a[1:len(a)]))/a[0]*100,4)+"%")
profile
오삽 : 오늘도 삽질

0개의 댓글