시작한 지 얼마되지 않은 것 같지만
이렇게 모아서 보니 꽤 많은 문제를 풀었다.
앞으로도 꾸준히 6문제 이상씩 풀고 리뷰하면
안 풀리던 문제도 풀릴 거라 희망하며...
그리고 파이썬 기본 문법도 병행하고 있는데
풀었던 문제도
더 간단하고 복잡하지 않게 수정하는 연습도 해보고 싶다.
4일차까지 푼 문제들
1000 1008 1085 1546 2557 2588 2675 2739 2750 2884 5355 10039 10718 10757 10809 10818 10952 14681 15552 15596
8일차까지 푼 문제들
1000 1008 1085 1330 1427 1546 1712 2163 2292 2476 2557 2562 2588 2675 2739 2750 2751 2884 2914 3009 4101 4153 4344 5355 5717 8393 9498 10039 10171 10250 10718 10757 10809 10817 10818 10950 10952 10998 11022 11557 14681 15552 15596
5일차~8일차동안 푼 문제들
1330 1427 1712 2163 2292 2476 2562 2751 2914 3009 4101 4153 4344 5717 8393 9498 10171 10250 10817 10950 10998 11022 11557
참고로 재미삼아 만들어 본 아래 코드로 출력했다!
앞으로 애용해야지.
import sys
def listSub(list1, list2):
for i in list2:
list1.remove(i)
return list1
oldList = list(sys.stdin.readline().split())
newList = list(sys.stdin.readline().split())
print(*listSub(newList, oldList))
왜 당연히 리스트 reverse 함수가 있을 거라고 생각했지?
자연스럽게 list.reverse()했더니 오류가 발생했다.
그래서 구글링해보았다.
sort함수에 reverse라는 매개변수 옵션이 있어
sort(reverse=True)로 쓰면 된다.
num = input()
numList=list(map(int, list(num)))
numList.sort(reverse=True)
result=''
for i in numList:
result += str(i)
print(result)
문제를 읽어보고는 왜 등급이 높은가 한참 생각했었다.
혹시나 함정이 있을까봐.
답을 제출해보니 '시간초과'가 떴다.
'백준 파이썬 시간초과'라는 키워드로 구글링해보았다.
그래서 찾은
백준 파이썬 시간 초과 해결
파이썬 입력 받기
개인적으로 뭔가 가로로 길어지는 코드가 가로 스크롤을 해야해서
별로라고 생각했는데(별 쓸데 없는 이유),
빠른 입력을 위해서는 sys.stdin.readline()이 필수적이란 것을
이후 문제들을 통해 알게 되었다.
howMany = int(input())
numList=[]
for i in range(0, howMany):
numList.append(int(input()))
numList.sort()
for i in numList:
print(i)
import sys
howMany = int(input())
numList = []
for i in range(0, howMany):
nums = int(sys.stdin.readline())
numList.append(nums)
numList.sort()
for j in numList:
print(j)
어려운 문제는 아니었으나 입력되는 자료를 처리하기가 생각보다 어려웠던 문제.
중간에 헤맸던 부분은 다음과 같다.
입력받은 점수들이 파이썬에서는 바로 정수가 되는 것이 아니라서
공백으로 나뉘어진 부분으로 자료를 구분하고 다음에 정수로 바꾸어야 했다.
더불어 리스트로 만들기까지.
그래서 쓰게된 코드인
list(map(int, input().split(' ')))
아직 쉬운 문제밖에 안 풀어봐서 모르겠지만
이 코드 진짜 많이 쓰인다.
마지막 출력하는 비율에 대해 소수점 셋째짜리까지 반올림하기 위해
파이썬 소수점 제한하기
format 서식 지정을 이용했다.
print("{:.3}%".format(m))
format 서식이 유용한 것 같지만 아직 익숙치 않다.
좀 더 써보는 버릇을 들여야 겠다.
그래서 두구두구두굳구
testCaseNum=int(input())
count = 0
studentNum = 0
grades = []
gradeSum = 0
average = 0
studentCount = 0
ratio = 0
ratioList = []
while count<testCaseNum:
testCase = list(map(int, input().split(' ')))
studentNum = testCase[0]
for i in range(1, studentNum+1):
grades.append(testCase[i])
for j in grades:
gradeSum += j
average = gradeSum/studentNum
for k in grades:
if k > average:
studentCount += 1
ratio = studentCount/studentNum*100
ratioList.append(ratio)
count += 1
grades.clear()
gradeSum = 0
studentCount = 0
for m in ratioList:
print("{:.3f}%".format(m))
num=int(input())
count = 0
numXX=0
numYY=0
guestRoomNum = []
while count<num:
data=input()
hotelH = int(data.split(' ')[0])
hotelW = int(data.split(' ')[1])
guest = int(data.split(' ')[2])
numXX=guest%hotelH
numYY=guest//hotelH+1
if numYY < 10:
numYY = '0'+str(numYY)
guestRoomNum.append(str(numXX)+str(numYY))
count += 1
for i in guestRoomNum:
print(int(i))
손님 수가 호텔 층수에 나누어 떨어지면 원하는 값을 출력 못해서 수정했다.
처음에는 무엇이 잘못됐는지 몰라 많이 헤맸던 문제.
num=int(input())
count = 0
numXX=0
numYY=0
guestRoomNum = []
while count<num:
data=input()
hotelH = int(data.split(' ')[0])
hotelW = int(data.split(' ')[1])
guest = int(data.split(' ')[2])
numXX=guest%hotelH
numYY=guest//hotelH+1
if numXX == 0 :
numXX = hotelH
numYY = numYY-1
if numYY < 10:
numYY = '0'+str(numYY)
guestRoomNum.append(str(numXX)+str(numYY))
count += 1
for i in guestRoomNum:
print(int(i))
얏호
초등학교 때 배운 최소공배수인데...!
대학 졸업 직전인 지금은 왜 못하는 건데...!
import sys
def primeNumber(num):
if num != 1:
for f in range(2, num):
if num % f == 0:
return False
else:
return False
return True
def divNum(num1, num2):
for j in range(1, min(num1, num2)+1):
if primeNumber(j)==True:
if num1%j==0 and num2%j==0:
count = 0
while num1%j==0 and num2%j==0:
num1=num1/j
num2=num2/j
count += 1
factorList.append(pow(j, count))
testCaseNum = int(sys.stdin.readline())
resultList = []
for i in range(testCaseNum):
num1, num2 = map(int, sys.stdin.readline().split())
factorList = []
divNum(num1, num2)
basicFactor = 1
for k in factorList:
basicFactor *= k
factor1 = num1/basicFactor
factor2 = num2/basicFactor
result = basicFactor*factor1*factor2
resultList.append(result)
s = ''
for results in resultList:
s += (str(int(results))+ '\n')
print(s)
내가 너무 복잡하게 생각해서 그런가.
일단 이 코드 자체로는 값이 출력되는 것 같은데,
'시간 초과'가 뜬다.
엉엉엉 혹시 고수님들 미천한 제 글을 보고 계신다면
제발 도와주세요.
import sys
num = int(input())
numList = []
count = 0
while count<num:
numList.append(int(sys.stdin.readline()))
count += 1
numList.sort()
for i in numList:
print(i)
import sys
numList = []
numNum = int(sys.stdin.readline())
for i in range(numNum):
numList.append(int(sys.stdin.readline()))
numList.sort()
s = ''
for i in numList:
s += str(i) + '\n'
print(s.strip())
메모리 초과라니 이건 또 머선 소리야...
파이썬 초보에겐 그냥 몇 줄 적는 것도 벅차단 말이야
그냥 대충 나오면 되는 거 아냐?!
일단 시간 초과나 메모리 초과에 대한 대처 방법을 잘 모르니
차츰차츰 찾아보기로 하고 일단 보류하겠다.