백준 실버 4 모음
https://www.acmicpc.net/problem/11508
처음 코드는 시간초과 났는데 왜일까? input() 문제일까
import sys
input=sys.stdin.readline
l=sorted([int(input()) for _ in range(int(input()))])[::-1]
s=c=0
for i in l:
s+=i if c%3!=2 else 0
c+=1
print(s)
enumerate를 왜 쓰나 했더니 count 대신 인덱스를 가져온 거구나 ㄹㅈㄷ
print(sum(x for i,x in enumerate(sorted(l)[::-1])if i%3!=2))
https://www.acmicpc.net/problem/1302
l=[]
r=set()
for _ in range(int(input())):
l.append(input())
for i in l:
r.add((l.count(i),i))
print(sorted(r,key=lambda x:(-x[0],x[1]))[0][1])
# 이게 무슨 뜻일까 다음에 확인하기!!
sorted(l,key=lambda x:(-l.count(x),x))[0]
https://www.acmicpc.net/problem/10825
정렬조건이 여러 개이고 각각 정렬기준이 오름차순, 내림차순으로 섞여있다면 key에 부호 -를 붙여 정렬하기
- : 내림차순 정렬key=lambda x:(-x[1],x[2],-x[3],x[0])N=int(input())
l=[]
for _ in range(N):
n,k,e,m = input().split()
l.append((n,int(k),int(e),int(m)))
l.sort(key=lambda x:(-x[1],x[2],-x[3],x[0]))
for i in l:
print(i[0])
https://www.acmicpc.net/problem/3036
import math
input()
l=input().split()
a=int(l[0])
for i in l[1:]:
i=int(i)
g=math.gcd(a,i)
print(f'{int(a/g)}/{int(i/g)}') # 이거 말고!!
print(f'{a//g}/{i//g}')
이렇게 풀었는데 제발!!!! 정수가 필요하다면 int() 대신 // 써라!! 무려 8바이트 차이다.... :(
https://www.acmicpc.net/problem/1158
전에 푼 11866 문제랑 뭐가 다른가 했더니 deque 라이브러리를 쓰라는 문제였나? 리스트는 느리군...! 숏코딩은 뭐 난리났더만ㅋㅋ; 얼른 짱이 되어야지
from collections import deque
a,b = map(int,input().split())
l=deque(range(1,a+1))
r=[]
while l:
for i in range(b-1):
l.append(l.popleft())
r.append(l.popleft())
print(str(r).replace('[','<').replace(']','>'))
https://www.acmicpc.net/problem/1065
아직 코드 짜는 논리가 부족한 것 같다. 저 if i==1000은 없어도 되는데 왜 넣었을까 ㅋㅋㅋ 가끔 이런 없어도 되는 코드를 넣는 것 같은데 풀다보면 나아지겠지...! 이걸로 알게 된 것은 분기도 실행횟수에 들어간다! 분기를 빼면 36ms인데 있으면 40ms였다! 쓸데없는 분기는 넣지말자! 실행속도 늘어난다!!!
n=int(input())
if n<100:
print(n)
else:
c=99
for i in range(100,n+1):
if i==1000: # 굳이싶은 분기
break
i=str(i)
if int(i[0])-int(i[1])==int(i[1])-int(i[2]):
c+=1
print(c)
https://www.acmicpc.net/problem/2847
이거 거의 바로 풀었다~! 대충 20분 걸렸나 체감상 10분 안에 푼 듯ㅋ 근데 왜 성공이라고 안 뜨지... :(
l = []
i=c=0
for _ in range(n):
l.append(int(input()))
while i!=n-1:
if l[i] >= l[i+1]:
l[i]-=1
c+=1
i=0
else:
i+=1
print(c)
l = [int(input()) for i in range(int(input()))]
이렇게 한 줄로 개행 입력을 받을 수 있군!
https://www.acmicpc.net/problem/1049
푸는 방법은 빨리 생각해냈으나... 패키지가 낱개보다 더 비싼 경우는 고려 못 했다. 당연한 거 아님? 누가 낱개를 더 싸게 팔아! ☹️☹️
n,m = map(int,input().split())
A,B = [],[]
for _ in range(m):
a,b = map(int,input().split())
A.append(a)
B.append(b)
A.sort()
B.sort()
q=n//6
r=n%6
if A[0]>6*B[0]:
print(n*B[0])
else:
ans=(q+1)*A[0] if r*B[0]>A[0] else q*A[0]+r*B[0]
print(ans)
https://www.acmicpc.net/problem/9012
강의 보고 풀었는데 코드길이 242 실화냐 ㅋㅋㅋㅋㅋ
n=int(input())
for k in range(n):
l=[]
r=0
s = input()
for p in s:
if p =='(':
l.append(p)
else:
try:l.pop()
except:
r=1
break
if len(l)==0 and r==0:
print('YES')
else:
print('NO')
ㅋㅋㅋㅋ아니 ㄹㅈㄷ... 스택을 안 쓰고 푸니까 짧지... 이런 멋쟁이들!
N = int(input())
for i in range(N):
a = input()
while "()" in a:
a = a.replace("()","")
if a == "":
print("YES")
else:
print("NO")
https://www.acmicpc.net/problem/10610
그리디 문제라고 해서 하나하나 다 해보는 건 줄 알았는데 정수론으로도 풀 수 있대서 어찌저찌 풀다가 숏코딩을 보니...
import itertools
n = sorted(input(),reverse=True)
l = sum(map(int,n))
if l%3==0 and n.count('0'):
r = []
for i in itertools.permutations(n,len(n)):
l = list(i)
s = int(''.join(l))
if s%30==0:
print(s)
break
else:
print(-1)
그냥 수를 정렬해서 30의 배수인지만 확인하면 됨... 애초에 다 돌릴 필요없이 내림차순정렬한 첫 번재 값이 답임...굳이 itertools 라이브러리 안 써도 됨...ㄹㅈㄷ
n = sorted(input(),reverse=True)
l = sum(map(int,n))
if l%3==0 and n.count('0'):
print(''.join(n))
else:
print(-1)
https://www.acmicpc.net/problem/2217
오~ 쉽게 빨리 잘 풀었다~!~!
n = int(input())
l = []
for _ in range(n):
l.append(int(input()))
l.sort()
ans = 0
k = 0
for i in l:
ans = max(i*(len(l)-k),ans)
k+=1
print(ans)
https://www.acmicpc.net/problem/1026
n = input()
l = sorted(map(int,input().split()))
l2 = sorted(map(int,input().split()),reverse=True)
s = 0
for i in range(len(l)):
s += l[i]*l2[i]
print(s)
https://www.acmicpc.net/problem/11047
n, m = map(int, input().split())
l = [int(input()) for _ in range(n)]
s = 0
for i in l[::-1]:
r = m // i
if r == 0:
continue
else:
s += r # 여기서 r을 더하는데 0이어도 상관없구나! 계속 이걸로 코드 늘어나네 ㅋㅋ;;
m %= i
print(s)
https://www.acmicpc.net/problem/11399
n = int(input())
l = sorted(map(int,input().split()))
s = 0
for i in range(len(l)):
s += sum(l[:i+1])
print(s)
https://www.acmicpc.net/problem/10845
이게 최선이다.
import sys
n = int(input())
res = []
for _ in range(n):
s = sys.stdin.readline().split()
if len(s)>1:
num = int(s[1])
if s[0] == 'push': res.append(num)
elif s[0] == 'pop':
if not res: print(-1)
else: print(res.pop(0))
elif s[0] == 'size': print(len(res))
elif s[0] == 'empty':
if not res: print(1)
else: print(0)
elif s[0] == 'front':
if not res: print(-1)
else: print(res[0])
elif s[0] == 'back':
if not res: print(-1)
else: print(res[-1])
음~ 삼항연산자로도 할 수 있군
print(q[-1] if res else -1)