21일차 문제

양진혁·2021년 11월 21일
0

문제풀이

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

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

n = int(input())
for i in range(n):
  num = 0
  count = 0
  el = list(str(input()))
  for j in el:
    if j == "O":
      count +=1
      num +=count
    elif j == "X":
      count = 0
  print(num)

num과 count를 0이라 하고 j가 O일때 count에 1씩 더해주면서 그 더해준 숫자를 num에 더해준다. 만약 X라면 다시 count를 0으로 만들어 준다.

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

예제 입력 1
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

예제 출력 1
40.000%
57.143%
33.333%
66.667%
55.556%

첫번째 입력은 테스트 개수이고 두번째 입력의 첫번째는 사람 명수 두번째부터는 점수를 의미한다.

n = int(input())
for i in range(n):
  el = []
  num = 0
  data = list(map(int,input().split()))
  for j in range(1,len(data)):
    num +=data[j]
    aver = (num/data[0])
  for i in range(1, len(data)):
    if data[i]>aver:
      el.append(data[i])
  print("{0:.3f}".format(round(len(el)/data[0]*100,3))+"%")

먼저 num에 점수를 다 더해 aver 변수 안에 넣어준다. 그 다음 for문을 사용해서 round 함수를 써서 소수점 세번째 자리수까지 프린트 해주었고 40.0% 경우에 대비해서 "{0:3f}"를 사용했다.

세번째 문제
Python 2, Python 3, PyPy, PyPy3: def solve(a: list) -> int
a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
리턴값: a에 포함되어 있는 정수 n개의 합 (정수)

def solve(a):
  n = 0
  for i in a:
    n +=i
  return n

a 리스트 안에 있는 모든 수를 더하는 것으로 비교적 간단한 문제였다.

네번째 문제
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. N개의 숫자를 모두 더하는 프로그램을 만들어야 한다.

n = int(input())
b = list(map(int, input()))
print(sum(b))

두번째 입력한 숫자를 리스트 형태로 만든 후 sum을 통해서 합계를 냈다.

다섯번째 문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

예제 입력 1
The Curious Case of Benjamin Button

예제 출력 1
6

n = input()
print(len(n.split()))

split()을 통해서 띄어쓰기마다 나눠주고 리스트의 길이를 구하는 방법으로 풀었다.

여섯번째 문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

예제 입력 1
734 893

예제 출력 1
437

a, b = input().split()
a = int(a[::-1])
b = int(b[::-1])
print(max(a,b))

a와 b를 받은 후 [::-1]을 통해 역순으로 정렬한다.
그 후 max를 사용해서 값이 큰 걸 리턴했다.

0개의 댓글