πŸ”‘ μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€ Python

[λ°±μ€€] μ •λ ¬ /파이썬 2217 λ‘œν”„, 1764 λ“£λ³΄μž‘

Tamii 2021. 4. 20. 23:34
λ°˜μ‘ν˜•

πŸ“Œ 2217 λ‘œν”„

www.acmicpc.net/problem/2217

 

2217번: λ‘œν”„

N(1 ≤ N ≤ 100,000)개의 λ‘œν”„κ°€ μžˆλ‹€. 이 λ‘œν”„λ₯Ό μ΄μš©ν•˜μ—¬ 이런 μ €λŸ° 물체λ₯Ό λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλ‹€. 각각의 λ‘œν”„λŠ” κ·Έ κ΅΅κΈ°λ‚˜ 길이가 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ“€ 수 μžˆλŠ” 물체의 μ€‘λŸ‰μ΄ μ„œλ‘œ λ‹€λ₯Ό μˆ˜λ„ μžˆλ‹€. ν•˜

www.acmicpc.net

처음 생각

n 개수λ₯Ό 받은후 λŒλ©΄μ„œ μ΅œλŒ€ μ€‘λŸ‰μ„ list둜 λ°›μŒ

제일 μž‘μ€ μ΅œλŒ€ μ€‘λŸ‰ * n κ°œκ°€  λ‘œν”„λ“€μ˜ μ΅œλŒ€μ€‘λŸ‰μ΄λΌκ³  생각

import sys
input= sys.stdin.readline

n=int(input())

weight = list(int(input()) for _ in range(n))
weight.sort();

print(weight[0]*n)

μ—­μ‹œλ‚˜ μ˜€λ‹΅.

였λ₯˜: λ‘œν”„λ₯Ό μ „λΆ€ μ“΄ 경우 < 졜적의 λ‘œν”„λ₯Ό μ“΄ 경우의 μ΅œλŒ€ μ€‘λŸ‰μ΄ 클 수 μžˆλ‹€λŠ” 점을 κ°„κ³Όν–ˆλ‹€.

 

μœ μ‹¬νžˆ μƒκ°ν•΄λ³΄λ‹ˆ,

각 λ‘œν”„λ“€μ΄ λ“€ 수 μžˆλŠ” μ΅œλŒ€μ€‘λŸ‰μ„ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ 후에

μ΅œλŒ€μ€‘λŸ‰ * λ‘œν”„ 개수 (+1 μ”© 증가)  이 값이 κ°€μž₯ 큰  κ²½μš°κ°€ μ΅œλŒ€ μ€‘λŸ‰μ΄λΌλŠ” 생각이 λ“€μ—ˆλ‹€.

 

 

λ‚˜μ˜ 풀이

import sys
input= sys.stdin.readline

n=int(input())

weight = list(int(input()) for _ in range(n))
weight.sort(reverse=True)
max_weight=0
for i in range(len(weight)):
    if max_weight<weight[i]*(i+1):
        max_weight=weight[i]*(i+1)
print(max_weight)

weightλΌλŠ” list에 μ΅œλŒ€μ€‘λŸ‰μ„ λ°›μ•„

λ°˜λŒ€λ‘œ μ •λ ¬ν•œ ν›„

μ΅œλŒ€μ€‘λŸ‰ * μ΅œλŒ€μ€‘λŸ‰μ„ λ“€ 수 μžˆλŠ” λ‘œν”„μ˜ 개수 λ₯Ό max_weight에 λ„£κ³  λΉ„κ΅ν•˜μ—¬ 

κ°€μž₯ 큰 값을 μ–»μ–΄λƒˆλ‹€.

 

λ‹€λ₯Έν’€μ΄

import sys
input= sys.stdin.readline

n=int(input())

weight = list(int(input()) for _ in range(n))

weight.sort()
weight_max=0
for i in weight:
    weight_max=max(i*n,weight_max)
    n-=1
print(weight_max)

λ‹€λ₯Έ 풀이λ₯Ό μ°Ύμ•„λ‚΄λ‹ˆ weight_maxλ₯Ό 돌며 λ°”λ‘œλ°”λ‘œ maxλ₯Ό κ³„μ‚°ν•˜λŠ” 방법도 μžˆμ—ˆλ‹€.

λ‹€λ§Œ λ‚˜μ˜ 풀이보닀 살짝 λŠλ Έλ‹€.

λ‚΄ν’€μ΄λŠ” λΉ„κ΅λŒ€μƒμ΄ ν•˜λ‚˜μ΄κ³  λ‹¨μˆœ μ—°μ‚°μ΄μ§€λ§Œ λ‹€λ₯Έν’€μ΄μ—μ„œλŠ” 맀번 maxλ₯Ό ν•΄μ£ΌκΈ° λ•Œλ¬ΈμΈ 것 κ°™λ‹€.

 

πŸ’™  μ–΄λ–€κ²Œ 더 λΉ λ₯Έ 방법인지 κ³ λ―Όν•˜λŠ” μŠ΅κ΄€μ„ κΈ°λ₯΄μž. max 보단 <  λ‹¨μˆœμ—°μ‚°μž!

 

 


πŸ“Œ 1764 λ“£λ³΄μž‘

www.acmicpc.net/problem/1764

 

1764번: λ“£λ³΄μž‘

첫째 쀄에 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ 수 N, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 수 M이 주어진닀. μ΄μ–΄μ„œ λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 걸쳐 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ 이름과, N+2μ§Έ 쀄뢀터 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 이름이 μˆœμ„œλŒ€λ‘œ 주어진닀.

www.acmicpc.net

문제보고 μ’€ 웃겼닀. 그리고 ν’€μ—ˆλŠ”λ° λ­”κ°€ μ°œμ°œν–ˆλ‹€.

이 μ―€ μ΄λŸ°λ¬Έμ œκ°€ λ‚˜μ˜¨λ‹€κ΅¬?

 

듣도λͺ»ν•œ μ‚¬λžŒμ˜ listλ₯Ό λ°›κ³  

λ‚˜λ¦„ μ‹œκ°„ 쀄인닀고 보도λͺ»ν•œ μ‚¬λžŒμ„ λ°›μœΌλ©΄μ„œ 듣도λͺ»ν•œ μ‚¬λžŒμ˜ listμ—μžˆλ‚˜ μ°Ύμ•˜μ§€λ§Œ 

listμ—μ„œ in으둜 μ°ΎλŠ”κ±°λŠ” μ—­μ‹œλ‚˜ μ‹œκ°„μ΄ˆκ³Όμ΄λ‹€  γ… γ… 

 

 

내풀이1

import sys
input = sys.stdin.readline

h,s = map(int,input().split())

hList = [input() for _ in range(h)]

ans=[]
for i in range(s):
    never_seen = input()
    if never_seen in hList:
        ans.append(never_seen)
print(len(ans))
for i in ans:
    print(i.strip())

μ—­μ‹œλ‚˜~~

 

내풀이2

import sys
input = sys.stdin.readline

h,s = map(int,input().split())

hList = list(input() for _ in range(h))
sList = list(input() for _ in range(h))

hSet=set(hList)
sSet=set(sList)

ans=[]
ans = sorted(list(hSet & sSet))
print(len(ans))
for i in ans:
    print(i.strip())

 

κ·Έλ ‡λ‹΄ list 말고 set으둜 μ²˜λ¦¬ν•˜μž! ν•΄μ„œ λ§Œλ“  문제

list둜 λ°›κ³  -> set으둜 λ°”κΏ”μ„œ κ΅μ§‘ν•©ν•˜κ³   -> list둜 λ°”κΏ” 쀑볡 제거 

정닡은 λ‚˜μ™”μ§€λ§Œ 쒋은 μ½”λ“œλΌλŠ” λŠλ‚Œμ€ μ—†λ‹€ ..γ… 

 

λ‹€λ₯Έ 풀이

import sys
input = sys.stdin.readline

def binarySearch(list,ele,low,high):
    while low<=high:
        mid = (low+high)//2
        if list[mid] == ele:
            return True
        if ele > list[mid]:
            low = mid+1
        else:
            high = mid-1

    return False



h,s = map(int,input().split())

hList = [input().strip() for _ in range(h)]
sList = [input().strip() for _ in range(s)]
hList.sort()

ans=[]
for i in sList:
    if binarySearch(hList, i, 0,h-1):
        ans.append(i)
print(len(ans))
for i in sorted(ans):
    print(i)

λ‹€λ₯Έ 풀이 방법을 μ°Ύμ•˜λŠ”λ°

이뢄탐색 ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ  SListλ₯Ό 돌며 이뢄탐색 ν•¨μˆ˜λ₯Ό 톡해 hList에 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 방법이닀.

이 μ—­μ‹œ μ •λ‹΅μœΌλ‘œ λ‚˜μ™”μ§€λ§Œ μ‹œκ°„μ΄ set을 μ΄μš©ν•œκ²ƒλ³΄λ‹€ 2λ°°κ°€ λ‚˜μ™”λ‹€.

 

μ•„λ¬΄λž˜λ„  이뢄탐색은 데이터λ₯Ό μ •λ ¬ν•˜λŠ” κ³Όμ •μ—μ„œ μ‹œκ°„μ΄ μ†Œμš” λ˜λŠ”λ°

set은 집합이기 λ•Œλ¬Έμ— κ΅μ§‘ν•©μ—°μ‚°μœΌλ‘œ ν•œλ²ˆμ— ν•΄κ²°ν•˜κΈ° λ•Œλ¬Έμ— 더 빨랐던 것같닀.

 

 

 

πŸ’™ μ˜€λŠ˜μ€ λͺ¨λ“  풀이에 μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜μ™€μ„œ λ‹Ήν™©ν–ˆμ§€λ§Œ μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚˜μ˜€λŠ” μœ ν˜•λ“€μ„ μ•Œκ²Œλ˜κ³  ν”Όν•˜λŠ” μŠ€ν‚¬μ„ μ•Œμ•„λƒˆλ‹€.

λ°°μ—΄μ˜ μ‘΄μž¬μ—¬λΆ€λŠ” in이 μ•„λ‹Œ set  ꡐ집합 ν˜Ήμ€ μ΄λΆ„νƒμƒ‰μœΌλ‘œ!

max λ³΄λ‹€λŠ” λ‹¨μˆœ μ—°μ‚°μžλ‘œ!