์ž๋ฃŒ๊ตฌ์กฐ/๐Ÿ‘‰์•Œ๊ณ ๋ฆฌ์ฆ˜ - 31

์˜ค๋Š˜ ๋“ค์€ ๊ฐ•์˜ ๋ชฉ๋ก

  1. ๊ณ ๊ธ‰ ์ž๋ฃŒ๊ตฌ์กฐ - 2
  2. ๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ดˆ

๊ณ ๊ธ‰ ์ž๋ฃŒ๊ตฌ์กฐ - 2

SHA-256

SHA-256

import hashlib
print(hashlib.sha256(input().encode()).hexdigest())

์ˆ˜ ์ฐพ๊ธฐ

์ˆ˜ ์ฐพ๊ธฐ

n๊ธธ์ด์˜ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง€๊ณ  ์ด๋ฅผ A๋ผ ํ•˜๊ณ , m๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์งˆ๋•Œ m๊ฐœ์˜ ์ˆ˜๊ฐ€ A์•ˆ์— ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ

result = []
n = int(input())
a = list(map(int, input().split(' ')))
m = int(input())
x = list(map(int, input().split(' ')))
a.sort()
for e in x:
    start, end = 0, n
    inserted = False
    while start < end:
        mid = (start + end) // 2
        if a[mid] == e:
            result.append('1')
            inserted = True
            break
        elif a[mid] < e:
            start = mid + 1
        else:
            end = mid
    if not inserted:
        result.append('0')
print('\n'.join(result))

์ฒซ ์ˆ˜์—ด์„ ์ •๋ ฌํ•ด์„œ ์ด์ง„ํƒ์ƒ‰์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ–ˆ๋‹ค.
์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ •๋ ฌํ•˜๋Š”๋ฐ $n log n$์ด๋ผ ํ•˜๋ฉด,
n๊ฐœ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์‹œ๊ฐ„ + m๊ฐœ๋ฅผ n๊ฐœ์—์„œ ์ด์ง„ํƒ์ƒ‰์œผ๋กœ ์ฐพ๋Š”์‹œ๊ฐ„
$n log n + m log n$์ด๋‹ค.

์ˆ˜์ฐพ๊ธฐ1

๋‹ค์Œ ํ’€์ด๋Š” ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ set(์ง‘ํ•ฉ)์„ ์‚ฌ์šฉํ•ด๋ดค๋‹ค.

result = []
n = int(input())
a = set(map(int, input().split(' ')))
m = int(input())
x = list(map(int, input().split(' ')))
for e in x:
    print(1 if e in a else 0)

์ˆ˜์ฐพ๊ธฐ2

ใ…—ใ…œใ…‘ใ…—ใ…œใ…‘.. ์—„์ฒญ ๋น ๋ฅธ๊ฒƒ

์นœ๊ตฌ ๋„คํŠธ์›Œํฌ

์นœ๊ตฌ ๋„คํŠธ์›Œํฌ

์นœ๊ตฌ ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์งˆ๋•Œ๋งˆ๋‹ค ๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ ,
ํ•ด๋‹น ๊ทธ๋ฃน์˜ ์นœ๊ตฌ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

parentOf = {}
rank = {}
friend = {}

def Find(node):
    if parentOf[node] != node:
        parentOf[node] = Find(parentOf[node])
    return parentOf[node]

def Union (n1, n2):
    p1 = Find(n1)
    p2 = Find(n2)
    if p1 == p2:
        return #friend[p1]
    if rank[p1] < rank[p2]:
        parentOf[p1] = p2
        friend[p2] += friend[p1]
        #return friend[p2]
    elif rank[p1] > rank[p2]:
        parentOf[p2] = p1
        friend[p1] += friend[p2]
        #friend[p1]
    else:
        rank[p1] += 1
        parentOf[p2] = p1
        friend[p1] += friend[p2]
        # return friend[p1]

tc = int(input())
for _ in range(tc):
    parentOf = {}
    rank = {}
    friend = {}
    f = int(input())
    for _ in range(f):
        fs = input().split(' ')
        for i in fs:
            if i not in friend:
                friend[i] = 1
                rank[i] = 0
                parentOf[i] = i
        Union(fs[0], fs[1])
        print(friend[Find(fs[0])])

์™„์ „ Union-Find ๋ฌธ์ œ๋‹ค.

Unionํ•จ์ˆ˜์—์„œ ์นœ๊ตฌ ์ˆ˜๋ฅผ ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜๋Š”๊ฒŒ 500ms ๋” ๋А๋ฆฌ๋‹ค.
(๋” ๋น ๋ฅผ ์ค„ ์•Œ์•˜๋Š”๋ฐ ???)
์นœ๊ตฌ ๋„คํŠธ์›Œํฌ

๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ

์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ

n = int(input())
num = []
for i in range(n):
    num.append(int(input()))
num.sort()
for e in num:
    print(e)

์ž…๋ ฅ๋ฐ›๊ณ  sort()๋กœ ์ •๋ ฌํ–ˆ๋‹ค.
์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด๋ด๋„ ์ข‹๋‹ค.

์†ŒํŠธ์ธ์‚ฌ์ด๋“œ

์†ŒํŠธ์ธ์‚ฌ์ด๋“œ

val = int(input())
l = []
while val:
    l.append(val % 10)
    val //= 10
l.sort()
p = 1
val = 0
for e in l:
    val += e * p
    p *= 10
print(val)

๊ฐ ์ž๋ฆฌ์ˆ˜๋ฅผ ๋‚˜๋ˆ ์„œ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ ํ›„, ์ •๋ ฌ,
์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ •๋ ฌํ•œ ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
$์ •๋ ฌํ•œ ์ˆ˜ = \sum_{e \in l} e * 10^{index}$

์†ŒํŠธ์ธ์‚ฌ์ด๋“œ

๋งˆ์ง€๋ง‰

ํฌ์ŠคํŠธ๋Š” ์จ๋†“๊ณ  ์ œ์ถœ ์•ˆํ•˜๋Š” ๋ฐ”๋žŒ์— ๋ฏธ์…˜ ์‹คํŒจ
๊ทธ๋ž˜๋„ ์ธ๊ฐ• ๋‹ค ๋“ค์„ ๋•Œ๊นŒ์ง€๋Š” ์“ฐ์ž

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ