세개의 자연수 a, b, c를 곱하였을 때 나오는 값에서 0부터 9까지 각각의 숫자가 몇번씩 쓰였는지 출력. a, b, c 입력 한줄씩. 0부터 9까지 몇번씩 쓰인건지 각각 한줄씩 출력.
import sys
a = int(sys.stdin.readline())
b = int(sys.stdin.readline())
c = int(sys.stdin.readline())
sum = list(str(a * b * c))
for i in range(10):
n = sum.count(str(i))
print(n)
count 함수를 기억하지 못했다면 완전히 노가다로 풀었어야 할 문제. 예제를 많이 풀어봐야 기억이 더 잘나고 익숙해질 것 같다.
음이 아닌 정수 10개를 각줄에 걸쳐 입력. 42로 나누었을 때 서로 다른 나머지가 몇개인지 출력.
import sys
li = [int(sys.stdin.readline().rstrip()) for i in range(10)]
l = []
for num in li:
l.append(num % 42)
s = set(l)
print(len(s))
중복이 안되는 set 자료형을 이용했다. 답을 맞춘후 구글링을 통해 찾아보니 더 간단하게 작성한 사람도 있었다.
# 더 간단한 예
li = []
for i in range(10):
n = int(input())
li.append(n % 42)
li = set(li)
print(len(li))
입력도 for문 안에 집이넣어 더 간결하게 만들었다. 중복이 안되는 set 자료형을 이용했단 점은 같았다.
과목수 N 첫줄, 점수들 둘째줄에 입력. 점수/최댓값 에 100을 곱하여 새로운 성적만들고 새로운성적의 평균구하기.
import sys
N = int(sys.stdin.readline())
score = list(map(int, sys.stdin.readline().split()))
s_max = max(score)
new_score = []
for i in range(N):
new_score.append(score[i] / s_max * 100)
print(sum(new_score) / len(new_score))
리스트에서도 sum, max, min 함수가 적용된다.
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
첫째줄에 테스트의 개수 n 입력. 테스트 한줄씩 개수만큼 입력. 테스트 한개마다 점수 출력.
import sys
n = int(sys.stdin.readline())
for i in range(n):
score = list(str(sys.stdin.readline().rstrip()))
count = 0
arr = []
for j in score:
if j == 'O':
count += 1
arr.append(count)
else:
count = 0
print(sum(arr))
첫째줄에 테스트 수 n. 둘째줄 첫수는 학생수, 뒤부터 학생들점수 입력. 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력.
import sys
num = int(sys.stdin.readline())
for i in range(num):
score = list(map(int, sys.stdin.readline().split()))
n = 0
avg = sum(score[1:]) / score[0]
for k in range(1, len(score)):
if score[k] > avg:
n += 1
print(str("%0.3f" % round(n / score[0] * 100, 3))+'%')
round
반올림 할 때는 round 내장함수를 이용.
round(a, b)
형식. round(a)
형식이면 소수 첫째자리에서 반올림.
round(4.16)
-> 결과는 4
round(4.16, 1)
-> 소수점 첫째자리까지 반올림함. 결과는 4.2
만약에 반올림할 수가 5이면, 5 앞의 숫자가 짝수이면 내림, 홀수이면 올림을 한다.
round(3.5)
-> 결과 4
round(4.5)
-> 결과 4
round(3.35, 1)
-> 결과 3.4
round(3.25, 1)
-> 결과 3.2
백준 4673번 문제였는데 정말 너무 모르겠어서 구글링을 했고, 풀이를 보면서 이렇게 풀 수도 있구나 생각이 들어 또 혼자 감탄했다..😅
예제를 풀면서 많은 것을 더 배우고 있는 것 같다.
natural_num = set(range(1, 10001))
generated_num = set()
for i in range(1, 10001):
for j in str(i):
i += int(j)
generated_num.add(i)
selfnumber = natural_num - generated_num
for k in sorted(selfnumber):
print(k)
백준 1065번.
import sys
num = int(sys.stdin.readline())
n = 0
for i in range(1, num+1):
if i < 100:
n += 1
else:
num_list = list(map(int, str(i)))
if num_list[0] - num_list[1] == num_list[1] - num_list[2]:
n += 1
print(n)
백준 10809번.
import sys
import string
n = sys.stdin.readline().rstrip()
asc = list(string.ascii_lowercase)
answer = []
for i in asc:
if i in n:
answer.append(str(n.index(i)))
else:
answer.append('-1')
print(" ".join(answer))
a-z까지를 for문으로 돌려야 해서 string 모듈에 있는 ascii_lowercase
메서드를 이용해서 리스트로 묶어줌.
유용한 string 모듈 기능
ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
digits = '0123456789'
hexdigits = '0123456789abcdefABCDEF'
octdigits = '01234567'
printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU...
punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
whitespace = ' \t\n\r\x0b\x0c'