문제: "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력: 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.
출력: 각 테스트 케이스마다 점수를 출력한다.
n = int(input())
for i in range(n) :
li = list(input())
sum = 0
cnt = 0
for j in range(len(li)) :
if li[j] == 'O' :
cnt += 1
sum += cnt
else :
cnt = 0
print(sum)
문제: 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력: 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력: 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
이중 for문으로 하나는 평균을 구하고, 하나는 평균보다 높은 학생을 카운트하여 퍼센트를 구했다.
ide에서는 됐는데 백준에서는 틀렸다고 나옴ㅠ
a = int(input())
for i in range(a) :
li = list(map(int, input().split()))
sum = 0
cnt = 0
for j in range(1, li[0]+1) :
sum += li[j]
average = sum/li[0]
for k in range(1, li[0]+1) :
if li[k] > average :
cnt += 1
print(str(round(cnt/li[0]*100, 3))+'%')
그래서 다른 블로그를 참고해서 출력부분을 바꿔보았다
// 이전
print(str(round(cnt/li[0]*100, 3))+'%')
// 이후
rate=cnt/li[0]*100
print('{0:0.3f}%'.format(rate))
그러니까 정답으로 뜸.
'{}'.format(숫자) 이런 형식으로 쓰는 건 format함수라고 한다
그렇다고 타입이 숫자인 건 또 아닌 것 같다.
print("{}".format(10)) # 10
print("{} {}".format(10, 20)) # 10, 20
print("{}년 {}월 {}일".format(2022, 10, 18)) # 2022년 10월 18일
# 실수를 소수 두번째 자리까지 표기하겠다
"{index(생략가능):.2f}".format(실수)
person1 = "철수"
person2 = "영희"
# 더하기 키워드
print(person1 + "는 " + person2 + "를 좋아한대요!")
# % 서식
print("%s는 %s를 좋아한대요!"%(person1, person2))
# str.format 함수
print("{}는 {}를 좋아한대요!".format(person1, person2))
# f-string 사용
print(f'{person1}는 {person2}를 좋아한대요!')
a = 10
print(f"a: {a}") # 10
print(f"a: {a:.2f}") # 10.00
print(f"소수점 셋째자리 : {a:.3f}") # 소수점 셋째자리 : 10.000
이런 식으로 쓸 수 있다.
print(round(40.000, 3)) # 40.0
n = int(input())
for _ in range(n):
data = list(map(int, input().split()))
m = data[0]
data = data[1:]
mean = sum(data)/m
count = 0
for i in range(m):
if data[i] > mean:
count += 1
print("{:.3f}%".format(count/m*100))
문제: 본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
입력: 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
출력: 각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
빠른 입출력을 사용해야할 때는 input()보다 sys.stdin.readline()을 써야한다고 한다
import sys
n = int(sys.stdin.readline())
for i in range(n) :
a, b = map(int, sys.stdin.readline().split())
print(a+b)
문제: 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력: 입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.
출력: 각 테스트 케이스마다 A+B를 출력한다.
while문 조건문에 취약한지라 while문 조건만 검색해서 찾아봤다.
True로 하면 무한루프에 걸릴 확률이 높지만 제대로 빠져나갈 곳만 만들어 놓으면 써도 괜찮다는 걸 알았다.
while True :
a, b = map(int, input().split())
if a == 0 and b == 0 :
break
else :
print(a+b)
문제: 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력: 입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력: 각 테스트 케이스마다 A+B를 출력한다.
해당 문제는 끝이 언제라는 걸 알 수가 없어서 무조건 에러가 날 수 밖에 없는 조건이었다.
그래서 실행해야하는 코드는 try문에, 에러가 나면 break가 되도록 코드를 짜야한다는 걸 배웠다.
while True :
try :
a, b = map(int, input().split())
print(a+b)
except :
break