π¦ λ¬Έμ μ체μ μ΅μ μ μ루μ
β 11497 ν΅λ무 건λλ°κΈ° β
π¦ λ¬Έμ λ₯Ό μ΄ν΄νκ³ ideaλ₯Ό μκ°νλ κ² μ€μ!
π¦ μΈμ ν λ ν΅λ무 λμ΄ μ°¨μ μ΅λκ°μ μ΅μννλ λ¬Έμ
β μ¦, μ΅μννκΈ° μν΄μλ μΈμ ν λ ν΅λ무κ°μ λμ΄ μ°¨κ° μ΅μνλμ΄μΌ νλ€
β‘ μλ‘κ°μ λμ΄ μ°¨λ₯Ό μ΅μννλ €λ©΄, κ°μ₯ ν° ν΅λ무λΆν° μμλλ‘ $h_1, h_2, h_3, h_4, .... h_n$μΌλ‘ μ λ ¬ν λ€, $h_1$μ μ μ€μμ, κ·Έ λ€μ $h_2, h_3$λ₯Ό μμμ, $h_4, h_5$λ₯Ό κ·Έ λ€μ μ μμ μ°¨λ‘λλ‘ λ°°μΉνλ©΄, μλ‘ κ°μ λμ΄ μ°¨λ₯Ό μ΅μνν μ μλ€.
π¦ greedyμ μλͺ μ μκ° λ¨μΆ! λ§€μ° λ§μ νμ΄λ₯Ό 보며 μκ° λ¨μΆμ λ¬Έμ μ νΉμ±μ λ§κ² codeλ‘ κ³ μ³κ°λ©° μ§νν΄λ³΄μ
- 352ms -
β μ κ·Έλ¦Όμ λ§κ² μ μΌ λμ ν΅λ무λ₯Ό κ°μ΄λ° μ€μ¬, κ·Έ μ μμ κ·Έ λ€μ λμ ν΅λ무 2κ°, μ΄λ° μμλ‘ μ μμΌλ‘ λ»μ΄κ°λ©° λ§λ€μ΄λ³΄κΈ°
→ slicingκΈ°λ² μ¬μ©
→ λ¨Όμ μ λ ¬ ν step 2μ© λ°μΌλ©° μ μΌ λμ ν΅λ무κΉμ§ μ λ ¬ν λ€, λ€μ μ²μ μμΉλ₯Ό ν₯ν΄ step 2μ© λ°μΌλ©° λλ¨Έμ§ ν΅λ무 μ λ ¬
(κ°μκ° ν/μ§ μ¬λΆμ λ°λΌ λλμ΄ μ λ ¬)
β‘ μ΄μ λ€ μ λ ¬νλ€λ©΄, κ° μΈμ ν ν΅λ무 κ°μ λμ΄ μ°¨ abs() μ¬μ©ν΄ λΉ listμ λͺ¨λ element λ£μ λ€, μ΅λκ° μΆλ ₯
import sys
input=sys.stdin.readline
for _ in range(int(input())):
N = int(input())
Lis = list(map(int, input().split()))
Lis.sort()
height_diff = []
if N%2 == 0:
heights = Lis[::2]+Lis[::-2]
else:
heights = Lis[::2]+Lis[-2::-2]
for i in range(len(heights)):
if i == len(heights) - 1:
i = -1
height_diff.append(max(abs(heights[i]-heights[i+1]), abs(heights[i] - heights[i-1])))
print(max(height_diff)) #μ΅μ’
372ms - ν¨μ¨μ code λ μ°Ύμ보기
- 236ms -
β» λ³λμ listλ§λ€μ΄ ν΄λΉ listμ μ΅λκ°μ ꡬνλ κ² λ³΄λ€λ, μ§μμ μΌλ‘ μ΅λκ°μ updateν΄μ λ³μκ°μ μΆλ ₯νλκ² λ λΉ λ¦
import sys
input=sys.stdin.readline
for _ in range(int(input())):
N = int(input())
Lis = list(map(int, input().split()))
Lis.sort()
if N%2 == 0:
heights = Lis[::2]+Lis[::-2]
else:
heights = Lis[::2]+Lis[-2::-2]
ans = abs(heights[0]-heights[-1])
for i in range(N):
ans = max(ans, abs(heights[i]-heights[i-1]))
print(ans)
- 148ms -
β» μ κ·Έλ¦Όμ μΈμ ν λ ν΅λ무μ μ°¨μ΄λ κ²°κ³Όμ μΌλ‘ slicing μ§ν μμ΄, νμ¬ ν΅λ무μ λ step λ¨μ΄μ§ ν΅λ무μμ λμ΄ μ°¨μ΄μ΄λ―λ‘ μ λ ¬ ν λ¨μν indexλ‘ 2 λ¨μ΄μ§ λ§νΌμ μ°¨μ΄λ₯Ό ꡬνλ©΄ λλ€. μ¬κΈ°μ μ λ ¬μ΄ μ΄λ―Έ μ§νλμμΌλ―λ‘ abs() ν¨μ μ¬μ© μμ΄ λ¨μν ν° λμ΄μμ μμ λμ΄λ₯Ό λΉΌλ©΄ λλ€.
β» μ μμ) 맨 λ§μ§λ§ λ ν΅λ무λ μΈμ ν ν΅λ무 μ°¨λ₯Ό λΉκ΅ν΄λ΄€μ μ΄λ―Έ μμμ λΉκ΅λμμ ν¬ν¨λκ±°λ, (μ) 5μ 6μ μμ λΉκ΅ λμμΈ 4μ 6λ³΄λ€ ν΄ μκ° μμΌλ―λ‘ λ°°μ . μ¦ 1λΆν° 4κΉμ§λ§, 1λΆν° n-2κΉμ§λ§ step 2 κ°κ²© diff μ΅λκ° update
import sys
input=sys.stdin.readline
for _ in range(int(input())):
N = int(input())
Lis = sorted(list(map(int, input().split())))
print(max([Lis[i+2]-Lis[i] for i in range(N-2)]))
β 9440 μ«μ λνκΈ° β
import sys
input=sys.stdin.readline
import math
while 1:
l=list(map(int,input().split()))
N=l[0]
if N==0:break
numbers=l[1:]
numbers.sort()
without_zeros=[i for i in numbers if i!=0]
ans = 0
for i in range(N):
digits=10**(math.ceil((N-i)/2)-1)
if i==0 or i==1:
n=without_zeros[0]
ans+=digits*n
without_zeros=without_zeros[1:]
numbers.remove(n)
else:
ans+=digits*numbers[0]
numbers=numbers[1:]
print(ans)
π¦ greedyνκ², κ°μ₯ μμ μλΆν° κ°μ₯ ν° μ리μλΆν° μ°¨λ‘λλ‘ λ°°μ΄ν λ€μ, λνλ©΄ λ
π¦ λ¨, λ μ κ°κ° 맨 μμ리μ 0μ΄ μ¬ μ μμ
→ μ 체 Nκ°μ μ«μκ° μμΌλ―λ‘, μ΄λ₯Ό range() λ¬ΈμΌλ‘ λλ €, 첫 μ«μ & λ λ²μ§Έ μ«μμ κ²½μ° 0μ μ μΈν μ΅μλ₯Ό ꡬνκ³ , μ΄νλ κ·Έμ μ΅μκ°μ μ리μμ κ³±ν κ°μ total λ³μμ κ³μ add up
→ μ΄ λ, λ μμ μ리μκ° λκ°μ μ«μλ€μ κ²½μ°, μλ‘ μ«μ μλ¦¬κ° λ°λμ΄λ μκ΄ μλ€. κ·Έμ μλ‘ λν λ€μ, ν΄λΉ 10μ μ리μλ₯Ό κ³±ν κ°μ add up
β» μ 리)
β without_zerosμμ 맨 μμ λ κ° μ«μ μ ν - digitsμ κ³±
β‘ κ·Έ λ€μλΆν°λ numbersμμ 맨 μμ μ«μ κ³μ μ ν - digitsμ κ³±
(math.ceil(N-i/2)-1μ΄ 10μ μλ¦Ώμ)
β» μΆκ°) str()μ μ«μ μΆκ° → ν λ²μ int()λ‘ μλ¦Ώμ κ³μ° μμ΄ μ«μ νμ± β»
while True:
n = input()
if n == '0': break
li = sorted(n.split()[1:])
num1, num2 = str(), str()
for i in range(len(li)):
if li[i] != '0':
num1, num2 = li[i], li[i + 1]
li = li[:i] + li[i + 2:]
break
for i in range(0, len(li), 2):
num1 += li[i]
if i < len(li) - 1:
num2 += li[i + 1]
print(int(num1) + int(num2))
β 1541 μμ΄λ²λ¦° κ΄νΈ β
import sys
input=sys.stdin.readline
def split_and_calculate(exp,sign):
l = list(exp.split(sign))
ans = int(l[0])
for number in l[1:]:
if sign == '+':
ans += int(number)
else:
ans -= int(number)
return ans
exp=input().rstrip()
if '+' not in exp: #only consists of '-'
print(split_and_calculate(exp,'-'))
elif '-' not in exp: #only consists of '+'
print(split_and_calculate(exp,'+'))
else: #'+' and '-'
l = list(exp.split('-'))
if '+' in l[0]:
ans = split_and_calculate(l[0],'+')
else:
ans = int(l[0])
for small_exp in l[1:]:
if '+' in small_exp:
ans -= split_and_calculate(small_exp,'+')
else:
ans -= int(small_exp)
print(ans)
π¦ λ¬Έμ μν©μ ν¬κ² μΈ κ°μ§λ‘ λλ μ μλ€.
β +λ‘λ§ κ΅¬μ±λ μ
β‘ -λ‘λ§ κ΅¬μ±λ μ
β’ +μ -κ° κ°μ΄ μ‘΄μ¬νλ μ
π¦ β β‘ + λλ -λ‘λ§ μ΄λ£¨μ΄μ§ μμ κ²°κ³Όκ° μ΅μκ° λκ² νκΈ° μν΄μλ κ·Έμ κ΄νΈμ μ¬μ© μμ΄ κ·Έλλ‘ μ°μ°ν΄μ£Όλ©΄ λλ€.
→ + λ‘λ§ μ΄λ£¨μ΄μ§ μμ κ΄νΈλ₯Ό μ³λ μ΄μ°¨νΌ μκ° κ³μ λν΄μ§λ―λ‘ κ²°κ³Ό λ³λ x
→ -λ‘λ§ μ΄λ£¨μ΄μ§ μμ κ΄νΈλ₯Ό μΉ κ²½μ° -κ° -μ λ§λ +κ° λμ΄ μ€νλ € λ 컀μ§λ―λ‘ κ΄νΈ μ¬μ© μμ΄ κ·Έλλ‘ μ°μ°ν΄μΌ μ΅μκ°μ΄ λμ¨λ€.
π¦ β’ +μ -κ° κ°μ΄ μ‘΄μ¬νλ κ²½μ°, μ΅λν +μλ μλ€μ λ€ λν΄ μμ -κ° μμ λ + κΈ°νΈλ€μ κ²°κ³Όλ₯Ό ν λ²μ λΉΌμ€μΌ μ΅μκ°μ΄ λμ¨λ€.
→ λ¨Όμ -λ₯Ό κΈ°μ€μΌλ‘ split() ν λ€μ, + κ²°κ³Όλ€μ΄ λͺ¨μΈ elementμ κ²°κ³Όκ° λͺ¨μ΄λ©΄ 첫 λ²μ§ΈλΆν° μμν΄μ μ λΉΌμ£Όλ©΄ λλ€.
β 1931 νμμ€ λ°°μ β
import sys
input=sys.stdin.readline
N=int(input())
meetings=[]
for _ in range(N):
flag=True
s,e=map(int,input().split())
meetings.append((s,e))
meetings.sort(key=lambda a: (a[1],a[0]))
ans = 1
cur = meetings[0][1]
for meeting in meetings[1:]:
if cur <= meeting[0]:
ans += 1
cur = meeting[1]
print(ans)
π¦ μ΄λ €μΈμλ‘ μ΅λν κ°λ¨νκ² μκ°νμ. λ΄κ° νμλ₯Ό νμ¬ νκ³ μκ±°λ / νμ§ μκ±°λ λ μ€ νλμΈλ°, κ·Έ μ΄λ€ μν©μμλΌλ μΌλ¨ νμλ₯Ό μ‘μμΌ νλ greedyν μν©μμ, νμμ κ°μλ₯Ό μ΅λνν λ €λ©΄ λ΄κ° μ‘μ νμκ° λΉ¨λ¦¬ λλμΌ νλ€.
π¦ κ·Έλ λ€λ©΄, λΉμ₯ 빨리 λλλ νμλ₯Ό μ‘λ κ²μ΄ 곧 μ΅μ μ ν΄κ° λλ μ§ greedyμ μ λΉμ±μ λ°μ Έλ΄μΌ νλλ°,
λ΄κ° νμλ₯Ό μ‘μ λ μ΄λ€ ν νμλ₯Ό κΈ°μ€μΌλ‘ 무쑰건 μλμ κ°μ΄ 9κ°μ§μ μν©μΌλ‘ λλ μ μλ€.
π¦ λ΄κ° κ·Έ λ€μ νμλ₯Ό κ³ λ₯Ό λ, ν κ°μ νμλ₯Ό κΈ°μ€μΌλ‘ μμκ³Ό λμ΄ κ°κ° ν¬κ³ μκ³ κ°μ μ§ 3 x 3 κ²°κ³Ό 9κ°μ κ²½μ°μ μκ° μλ€.
β greedyλ₯Ό μ¦λͺ νλ €λ©΄ 무쑰건 λͺ¨λ κ²½μ°μ μλ₯Ό λ°μ§κ³ greedyνκ² κ³¨λΌμΌ νλ€ β μ΄ λ μμκ³Ό λμ΄ λͺ¨λ κ°μ 건 μ€λ³΅λλ―λ‘ μ μΈ. λͺ¨λ μν©μμ μ΄ 8κ°μ ν보 νμλ₯Ό λ§μ£Όνκ² λλ€.
β λ¨Όμ , κΈ°μ€νμλ³΄λ€ λ¦κ² λλλ (2) / (4) / (8)μ μ μΈ. κΈ°μ€ νμ λ€μ μΆκ° νμκ° μμ μ μμ΄μ μΉ΄μ΄νΈκ° λ λ κ°λ₯μ±μ΄ μκΈ° λλ¬Έ.
β‘ κΈ°μ€νμμ (5) / (6)λ μ μΈ. (1) (3) (7) νμ λ€μ μΆκ° νμκ° μμ μ μμΌλ―λ‘ μμ μΉ΄μ΄νΈκ° λ λ μ μμ΄μ μ μΈ
π¦ λ°λΌμ, μ°λ¦¬λ νμμ λλλ μκ°μ μ λ ¬ν΄ κ°μ₯ λ¨Όμ λλλ (1) (3) (7) νμλ₯Ό 무쑰건 μ νν΄μΌ ν¨μ μ μ μλ€. μ΄ λ, (1) (3) (7) μΈ κ° νμμ μμ μκ°μ΄ λͺ¨λ λ€λ₯Έλ°, μ μ΄μ μμ νμλ₯Ό λͺ¨λ μ ννκ³ κ·Έ λ€μ νμλ₯Ό κ³ λ₯΄λ μν©μ΄λΌ μμ μκ° μμλ 무방νλ€. λλλ μκ°μ΄ 무쑰건 λΉ λ₯΄κΈ°λ§ νλ©΄ λλ κ²μ΄λ€. (greedy)
π¦ (+μμΈ) λ§μ½ (9, 9) (1, 9)κ° μ νλμλ€λ©΄ (1,9)κ° μ νλμ§ μμΌλ―λ‘ μμμκ° = λλλ μκ°μΈ νμλ₯Ό μΆκ°λ‘ κ³ λ €ν΄ λλλ μκ°μ μ λ ¬ν λ€μ, μμ μκ°μ μ λ ¬νμ. κ·Έλμ λ² μ€νΈλ νμ (1)
π¦ μ½λ
β lambdaλ‘ νλ²μ λλλ μκ° μ λ ¬ → μμ μκ° μ λ ¬ lambda a: (a[1], a[0])
①첫λ²μ§Έ meetingμ μΉ΄μ΄νΈ ν μνμμ νμ¬ meetingμ λλλ μκ°μ cur λ³μλ‘ λκ³ κ·Έ λ€μ meetingλΆν° meetingμ μμ μκ°μ΄ λλλ μκ°λ³΄λ€ ν¬κ±°λ κ°μ μ§ κ³μ νμΈνλ©΄μ cur λ³μμ λ€μ μ¬ meetingμ λλλ μκ°μ updateνλ©° meeting κ°μ update
β 20117 νΈλ°μ° μμΈμ μ΄μν νμ§ κ³μ°λ² β
π§βοΈ greedy κ΄μ λΆμ
: κ°λ³ μν©) κ° νΈλ°μ°λ³λ‘ λ¬Άμ μ§ / λλ κ°λ³λ‘ μ§νν μ§ μ ν
: μ’ ν© μν©) λ¬Άμ λλ κ°λ³ νΈλ°μ°μ νμ§μ λͺ¨λ λνκΈ° / μ΅μ μ μ’ ν© μν©) νμ§ μ΅λκ° κΊΌλ΄κΈ°
β μ΅μ μ μ’ ν© μν©μ μ΅μ μ κ°λ³ μν©μ λͺ¨μμΌλ‘ λ§λ€ μ μκ³ , κ°λ³ μν©μ μ΅μ greedy μ루μ μ μ λ ¬ν λ€ (1λ²μ§Έ ν° κ², 1λ²μ§Έ μμ κ²) (2λ²μ§Έ ν° κ², 2λ²μ§Έ μμ κ²), μ΄λ° μμΌλ‘ (iλ²μ§Έ ν° κ², iλ²μ§Έ μμ κ²) / νμ κ°μλ©΄ μ€μ νΈλ°μ° κ°λ³ 1κ°
: κ°μ₯ μμ μκ° μ΅λκ°μΌλ‘ λΉμ₯ λ°λκ³ , μ΄ν κ·Έ λ€μ μ΅λκ°μ΄ κ·Έ λ€μ μ΅μκ°μΌλ‘ λ°λλ©΄μ μ§νλμ΄μΌ μ΅λκ°μ΄ λμ¨λ€. μ΅λκ°μ νμ¬μ μ΅μκ°μΌλ‘ λ°κΏμ£Όλκ² μ΅μ μ μν©. κ·Έκ² μλλΌ μ¬λ¬ κ°λ‘ λ¬Άλλ€λ©΄ μ΅λ / μ΅μκ° μλ μκ° μλ‘ λ°λ κ²½μ° κ·Έ μ¬μ΄μ μ°¨μ΄λ μ΅λκ°-μ΅μκ° μ°¨μ΄λ³΄λ€ 무쑰건 μκΈ° λλ¬Έμ μ΅μ μ μν©μ΄ μλ
β 1946 μ μ μ¬μ β
import sys
input=sys.stdin.readline
for _ in range(int(input())):
N=int(input())
l=[]
for _ in range(N):
a,b=map(int,input().split())
l.append((a,b))
l.sort()
ans,cur=N,l[0][1]
for pair in l[1:]:
if pair[1]>cur:
N-=1
else:
cur=pair[1]
print(N)
π§βοΈ greedy κ΄μ λΆμ
: κ°λ³ μν©) κ° μ¬μ μ±μ μ 보면μ λ μμ λͺ¨λ μμκ° λ¨μ΄μ§λ μ¬μμ΄λ©΄ μ μΈ
: μ’ ν© μν©) λͺ¨λ μ μΈνκ³ λ¨μ μ μ μ¬μλ€ / μ΅μ μ μ’ ν© μν©) μ΅λλ‘ μ λ°ν μ μλ λ¨μ μ μ μ¬μλ€ λͺ μ
β μ΅μ μ μ’ ν© μν©μ μ΅μ μ κ°λ³ μν©μ λͺ¨μμΌλ‘ λ§λ€ μ μκ³ , κ°λ³ μν©μ μ΅μ greedy μ루μ μ λ¨Όμ μλ₯μ¬μ¬ μ±μ μμΌλ‘ 1μλΆν° μ λ ¬ν λ€ λ©΄μ μ±μ λ§ μ΄μ©ν΄μ μμ μ μ μ¬μ μ΅κ³ μμ보λ€λ λͺ»ν μμλΌλ©΄ 1λͺ μ© μ μΈ: μ¦ cur λ³μλ‘ νμ¬ μ΅κ³ μμλ₯Ό updateν΄κ°λ©° νμ¬ μ΅κ³ μμλ³΄λ€ λͺ»ν μμλ©΄ μ μΈ. λ λμ μμλ©΄ cur update
β 1449 μ리곡 νμΉ β
import sys
input=sys.stdin.readline
cnt=0
N,L=map(int,input().split())
spots=sorted(list(map(int,input().split())))
ans,start=1,spots[0]-0.5
for spot in spots:
if (spot+0.5-start)>L:
start=spot-0.5
ans+=1
print(ans)
π§βοΈ greedy κ΄μ λΆμ
: κ°λ³ μν©) λ¬Όμ΄ μλ κ³³μ ν μ΄νλ‘ λΆμ΄κΈ°
: μ’ ν© μν©) λ¬Όμ΄ μλ λͺ¨λ κ³³μ κ°κ° ν μ΄νλ‘ λΆμ / μ΅μ μ μ’ ν© μν©) λΆμΈ ν μ΄ν κ°μ μ΅μκ°
β μ΅μ μ μ’ ν© μν©μ μ΅μ μ κ°λ³ μν©μ λͺ¨μμΌλ‘ λ§λ€ μ μκ³ , κ°λ³ μν©μ μ΅μ greedy μ루μ μ 맀 leak λλΆλΆκ³Ό ν start μ§μ μ¬μ΄μ κ°μ΄ ν μ΄ν κΈΈμ΄ Lμ λλ μ§ λ§€λ² νμΈνκ³ λμΌλ©΄ μΌλ¨ ν μ΄ν 1κ° νμνλ―λ‘ 1 μΉ΄μ΄νΈ / μ΄μ°¨νΌ ν μ΄νλ μ μ +- 0.5 μ§μ μ μμνκ±°λ λ©μΆλ―λ‘ ν leak μμλΆλΆμ startλ‘ μ€μ
β μ¬ν greedy: μΌλ¨ ν μ΄νκ° λ νμν μν©μ΄λ©΄ λ°λ‘ +1λ‘ λμ ν΄ λκ° (μ΄λ €μ΄ λ€μν μν© κ³ λ € μμ΄ μ΄μ© μ μλ μν© 1κ°λ§ λ§λ€μ΄μ κ·Έλλ‘ μΉ΄μ΄νΈ)
β 30022 νμ¬ μ€λΉ β
π§βοΈ κ° λ¬Όκ±΄μ΄ A μμ λλ B μμ μ μλλ° λ μμ μ€ ν κ³³μ μ ν. μ΄ λ κ° μμ λ³ μ¬μΌνλ νλͺ©μ κ°μλ μ ν΄μ Έ μμΌλ―λ‘, greedyμ ν΅μ¬μ μΌλ¨ μμ κ°μ κ°κ²© μ°¨κ° ν° κ³³λΆν° μ λ Ή → νΉμ μμ μ νλͺ© κ°μκ° λ€λ€λ₯΄λ©΄ κ·Έ λλ λ€λ₯Έ μμ μ λ Ή
import sys
input=sys.stdin.readline
N,A,B=map(int,input().split())
total=0
diff=[]
l1,l2=[],[]
for _ in range(N):
a,b=map(int,input().split())
l1.append(a)
l2.append(b)
combined = [(l1[i], l2[i]) for i in range(N)]
combined.sort(key=lambda x: abs(x[0] - x[1]),reverse=True)
for x in combined:
if (x[0]-x[1])>0:
if B > 0:
B-=1
total+=x[1]
else:
A-=1
total+=x[0]
else:
if A > 0:
A-=1
total+=x[0]
else:
B-=1
total+=x[1]
print(total)
β λ μκ°μ μ°¨λ‘ μ λ ¬ν λ€(lambda μ¬μ©), κ° μμ μ νλͺ© κ°μκ° λ€λ€λλμ§μ λ°λΌ κ²°μ → μ§ννλ©΄ λ!
'BOJ > π₯' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
β Set/Map Intermediate I - 13 Solvedβ (0) | 2023.02.15 |
---|---|
β Binary Search Upper-Intermediate I - 4 Solvedβ (0) | 2023.02.09 |
β Math & Geometry Upper-Intermediate I - 5 Solvedβ (0) | 2023.01.26 |
β Coordinate Compression Upper-Intermediate - 3 Solvedβ (0) | 2023.01.24 |
β Prefix Sum μ€κΈ - 5λ¬Έμ ()β (0) | 2023.01.18 |
λκΈ