๋ฌธ์ œ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๐Ÿ•ต๏ธ‍โ™€๏ธ ๋ฌธ์ œ


ํ•ด์ปค ๊น€์ง€๋ฏผ์€ ์ž˜ ์•Œ๋ ค์ง„ ์–ด๋Š ํšŒ์‚ฌ๋ฅผ ํ•ดํ‚นํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ํšŒ์‚ฌ๋Š” N๊ฐœ์˜ ์ปดํ“จํ„ฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊น€์ง€๋ฏผ์€ ๊ท€์ฐฎ๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ๋ฒˆ์˜ ํ•ดํ‚น์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํ“จํ„ฐ๋ฅผ ํ•ดํ‚น ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ํ•ดํ‚นํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ด ํšŒ์‚ฌ์˜ ์ปดํ“จํ„ฐ๋Š” ์‹ ๋ขฐํ•˜๋Š” ๊ด€๊ณ„์™€, ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ๊ด€๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, A๊ฐ€ B๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” B๋ฅผ ํ•ดํ‚นํ•˜๋ฉด, A๋„ ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ๋ฆฌ๋‹ค.

์ด ํšŒ์‚ฌ์˜ ์ปดํ“จํ„ฐ์˜ ์‹ ๋ขฐํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ•œ ๋ฒˆ์— ๊ฐ€์žฅ ๋งŽ์€ ์ปดํ“จํ„ฐ๋ฅผ ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

 

๐Ÿ’ก ์ž…๋ ฅ


์ฒซ์งธ ์ค„์—, N๊ณผ M์ด ๋“ค์–ด์˜จ๋‹ค. N์€ 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜, M์€ 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ์‹ ๋ขฐํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ A B์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋“ค์–ด์˜ค๋ฉฐ, "A๊ฐ€ B๋ฅผ ์‹ ๋ขฐํ•œ๋‹ค"๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ปดํ“จํ„ฐ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค.

 

 

 

 

 

๐Ÿ“Œ ์ถœ๋ ฅ


์ฒซ์งธ ์ค„์—, ๊น€์ง€๋ฏผ์ด ํ•œ ๋ฒˆ์— ๊ฐ€์žฅ ๋งŽ์€ ์ปดํ“จํ„ฐ๋ฅผ ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ํ’€์–ด๋ณด์ž~


A๊ฐ€ B๋ฅผ ์‹ ๋ขฐํ•˜๋Š” ํ˜•์‹์ด๋ฏ€๋กœ ์ž…๋ ฅ์„ x, y๋กœ ๋ฐ›๊ณ  arr[y].append(x)๋กœ ํ•ด์ฃผ์ž.

bfs๋ฅผ ๋Œ๋ฆด ๋•Œ arr[y]์— ์—ฐ๊ฒฐ๋œ ์• ๋“ค์ด vistited ๋œ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ณ  ์—†์œผ๋ฉด ๋ฐฉ๋ฌธ์„ ์ฐ๊ณ  ๋ฑ์— ์ฒจ๊ฐ€ํ•ด์ฃผ๋Š” ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ

 

from collections import deque

n, m = map(int, input().split())

arr = [[] for _ in range(n+1)]

for _ in range(m):
    x, y = map(int, input().split())
    arr[y].append(x)

def bfs(v):
    q = deque([v])
    visited = [False] * (n + 1)
    visited[v] = True
    count = 1
    while q:
        v = q.popleft()
        for e in arr[v]:
            if not visited[e]:
                q.append(e)
                visited[e] = True
                count += 1
    return count

result = []
max_value = -1

for i in range(1, n+1):
    c = bfs(i)
    if c > max_value:
        result=[i]
        max_value=c
    elif c == max_value:
        result.append(i)
        max_value=c

for e in result:
    print(e, end=" ")

 

 

์‹œ๊ฐ„ ์ดˆ๊ณผ ๋จธ์„ ์ผ์ด๊ตฌ,,,

๋ฌธ์ œ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๐Ÿ•ต๏ธ‍โ™€๏ธ ๋ฌธ์ œ


์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— ํšจ๊ณผ์ ์ธ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๋ฅผ ๊ตฌ์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•œ๋‹ค. ์ด ์ง€๋ ์ด๋Š” ๋ฐฐ์ถ”๊ทผ์ฒ˜์— ์„œ์‹ํ•˜๋ฉฐ ํ•ด์ถฉ์„ ์žก์•„ ๋จน์Œ์œผ๋กœ์จ ๋ฐฐ์ถ”๋ฅผ ๋ณดํ˜ธํ•œ๋‹ค. ํŠนํžˆ, ์–ด๋–ค ๋ฐฐ์ถ”์— ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๊ฐ€ ํ•œ ๋งˆ๋ฆฌ๋ผ๋„ ์‚ด๊ณ  ์žˆ์œผ๋ฉด ์ด ์ง€๋ ์ด๋Š” ์ธ์ ‘ํ•œ ๋‹ค๋ฅธ ๋ฐฐ์ถ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์–ด, ๊ทธ ๋ฐฐ์ถ”๋“ค ์—ญ์‹œ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•œ ๋ฐฐ์ถ”์˜ ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ์— ๋‹ค๋ฅธ ๋ฐฐ์ถ”๊ฐ€ ์œ„์น˜ํ•œ ๊ฒฝ์šฐ์— ์„œ๋กœ ์ธ์ ‘ํ•ด์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•œ๋‚˜๊ฐ€ ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋Š” ๋•…์€ ๊ณ ๋ฅด์ง€ ๋ชปํ•ด์„œ ๋ฐฐ์ถ”๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์‹ฌ์–ด ๋†“์•˜๋‹ค. ๋ฐฐ์ถ”๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๊ณณ์—๋Š” ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๊ฐ€ ํ•œ ๋งˆ๋ฆฌ๋งŒ ์žˆ์œผ๋ฉด ๋˜๋ฏ€๋กœ ์„œ๋กœ ์ธ์ ‘ํ•ด์žˆ๋Š” ๋ฐฐ์ถ”๋“ค์ด ๋ช‡ ๊ตฐ๋ฐ์— ํผ์ ธ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•˜๋ฉด ์ด ๋ช‡ ๋งˆ๋ฆฌ์˜ ์ง€๋ ์ด๊ฐ€ ํ•„์š”ํ•œ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์ถ”๋ฐญ์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ์ตœ์†Œ 5๋งˆ๋ฆฌ์˜ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 0์€ ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ์ง€ ์•Š์€ ๋•…์ด๊ณ , 1์€ ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ๋•…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

๐Ÿ’ก ์ž…๋ ฅ


์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์ฒซ์งธ ์ค„์—๋Š” ๋ฐฐ์ถ”๋ฅผ ์‹ฌ์€ ๋ฐฐ์ถ”๋ฐญ์˜ ๊ฐ€๋กœ๊ธธ์ด M(1 ≤ M ≤ 50)๊ณผ ์„ธ๋กœ๊ธธ์ด N(1 ≤ N ≤ 50), ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์ถ”๊ฐ€ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ์œ„์น˜์˜ ๊ฐœ์ˆ˜ K(1 ≤ K ≤ 2500)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ K์ค„์—๋Š” ๋ฐฐ์ถ”์˜ ์œ„์น˜ X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฐฐ์ถ”์˜ ์œ„์น˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

 

 

 

๐Ÿ“Œ ์ถœ๋ ฅ


๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ๋ฐฐ์ถ”ํฐ์ง€๋ ์ด ๋งˆ๋ฆฌ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ํ’€์–ด๋ณด์ž~


์šฐ์„  ๋ฐฐ์ถ”๋ฐญ์„ 0์œผ๋กœ ๋‹ค ์ฑ„์›Œ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ์™€ ๊ฐ™์€ ํฌ๊ธฐ๋กœ false ์ธ์ง€ true์ธ์ง€๋ฅผ ๋‹ด์•„์ค„ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค. ( ์™ผ์ชฝ ์ƒ๋‹จ์ด (0, 0)์ด ๋˜๊ฒŒ )

array=[[0]*m for _ in range(n)]
visited = [[False]*m for _ in range(n)]

 

๊ทธ๋ฆฌ๊ณ  k๋ฒˆ์”ฉ ๋Œ๋ฉด์„œ x, y ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ›์•„์ค€๋‹ค.

for _ in range(k):
    y, x = map(int,input().split())
    array[x][y] = 1

 

๊ฐ€๋กœ๋กœ m๊นŒ์ง€ ์„ธ๋กœ๋กœ n๊นŒ์ง€ for๋ฌธ์„ ๋Œ๋ฉด์„œ array์™€ visited๋ฅผ ํ†ตํ•ด ๋ฐฐ์ถ”๋Š” ์‹ฌ์–ด์ ธ์žˆ์ง€๋งŒ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์„ ์ฐพ์•„ ๋ฐฉ๋ฌธํ•ด์ฃผ๋Š” dfs๋‚˜ bfs๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด๋œ๋‹ค.

for i in range(n):
    for j in range(m):
        if array[i][j] and not visited[i][j]:
            dfs(i,j) ๋‚˜ bfs(i,j)

 

 

1. DFS๋กœ ํ’€ ๊ฒฝ์šฐ

์žฌ๊ท€ ์šฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. 

 

ํŒŒ์ด์ฌ์˜ ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ์€ 1000์œผ๋กœ ๋งค์šฐ ์–•๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๋ฌธ์ œ๋ฅผ ๊ทธ๋ƒฅ ํ‘ผ๋‹ค๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

ํŒŒ์ด์ฌ์œผ๋กœ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋ผ๋ฉด setrecursionlimit๋ฅผ ์“ฐ๋Š” ๊ฒƒ์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜๋‹ค.

 

  • ์ƒํ•˜์ขŒ์šฐ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ์ •ํ•ด์ฃผ๊ณ  ์ด๋ฅผ for๋ฌธ์œผ๋กœ ๋Œ๋ฆฐ๋‹ค.
  • ๊ฐ ์œ„์น˜์˜ ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๊ณ  ์ตœ๋Œ€ ๊ธธ์ด๋ณด๋‹ค ์ž‘์€์ง€ 1์ฐจ์ ์œผ๋กœ ํ™•์ธ์„ ํ•ด์ฃผ๊ณ , ์ด์— ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด continue๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์Œ ์œ„์น˜๋กœ ๋„˜๊ฒจ์ฃผ๊ฒŒ for๋ฌธ์œผ๋กœ ๋˜์ง„๋‹ค.
  • ๋งž๋‹ค๋ฉด ์ด์   ํ™•์ธ์„ ํ•ด์ค€๋‹ค. ์ด๊ณณ์— ๋ฐฐ์ถ”๊ฐ€ ์žˆ๊ณ  ๋ฐฉ๋ฌธํ•œ ์  ์ด ์—†๋Š”๊ฐ€?

 

# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
# ๋งŒ์•ฝ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋ผ๋ฉด setrecursionlimit์„ ์“ฐ๋Š” ๊ฒƒ์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜๋‹ค.
# ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ์žฌ๊ท€ ๊นŠ์ด ์ œํ•œ์€ 1000์œผ๋กœ ๋งค์šฐ ์–•๋‹ค.
# ๋”ฐ๋ผ์„œ ์žฌ๊ท€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒฝ์šฐ ์ด์ œํ•œ์— ๊ฑธ๋ ค ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ๋ณผ์ˆ˜ ์—†๋‹ค.
# ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
import sys
sys.setrecursionlimit(100000)

def dfs(x,y):
    visited[x][y] = True
    directions = [ (-1, 0), (1, 0), (0, -1), (0, 1)]
    # ์ƒํ•˜ ์ขŒ์šฐ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ์ง€์ •ํ•ด์ฃผ๊ณ  ์—ฌ๊ธฐ์„œ for๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.
    for dx, dy in directions:
        nx, ny = dx + x, dy+y
        if nx < 0 or nx >=n or ny<0 or ny>=m:
            continue
        if array[nx][ny] and not visited[nx][ny]:
            dfs(nx,ny)

for _ in range(int(input())):
    m, n, k = map(int,input().split())
    array=[[0]*m for _ in range(n)]
    visited = [[False]*m for _ in range(n)]
    for _ in range(k):
        y, x = map(int,input().split())
        array[x][y] = 1
    result = 0
    for i in range(n):
        for j in range(m):
            if array[i][j] and not visited[i][j]:
                dfs(i,j)
                result += 1
    print(result)

 

 

 

 

2. BFS๋กœ ํ’€์–ด๋ณด๋ฉด,,,

BFS๋Š” ๋ฑ..deque 

 

dfs์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ์ƒํ•˜์ขŒ์šฐ์˜ ์œ„์น˜๋ฅผ ๋‹ด์•„ for๋ฌธ์„ ๋Œ๋ ค์ค„ ๊ฒƒ์ด๋‹ค. 

from collections import deque

def bfs(x,y):
    q = deque()
    q.append((x,y))
    visited[x][y] = True
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    while q:
        x, y = q.popleft()
        for dx, dy in directions:
            nx, ny = x+dx, y+dy
            if nx < 0 or nx >= n or ny < 0 or ny >= m:
                continue
            if array[nx][ny] and not visited[nx][ny]:
                q.append((nx,ny))
                visited[nx][ny]=True


for _ in range(int(input())):
    m, n, k = map(int,input().split())
    array=[[0]*m for _ in range(n)]
    visited = [[False]*m for _ in range(n)]
    for _ in range(k):
        y, x = map(int,input().split())
        array[x][y] = 1
    result = 0
    for i in range(n):
        for j in range(m):
            if array[i][j] and not visited[i][j]:
                bfs(i,j)
                result += 1
    print(result)

 

๋ฌธ์ œ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๐Ÿ•ต๏ธ‍โ™€๏ธ ๋ฌธ์ œ


์‹ ์ข… ๋ฐ”์ด๋Ÿฌ์Šค์ธ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๋œ๋‹ค. ํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํ“จํ„ฐ์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๋Š” ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 7๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. 1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๋ฉด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” 2๋ฒˆ๊ณผ 5๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒˆ๊ณผ 6๋ฒˆ ์ปดํ“จํ„ฐ๊นŒ์ง€ ์ „ํŒŒ๋˜์–ด 2, 3, 5, 6 ๋„ค ๋Œ€์˜ ์ปดํ“จํ„ฐ๋Š” ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ 4๋ฒˆ๊ณผ 7๋ฒˆ ์ปดํ“จํ„ฐ๋Š” 1๋ฒˆ ์ปดํ“จํ„ฐ์™€ ๋„คํŠธ์›Œํฌ์ƒ์—์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

์–ด๋Š ๋‚  1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜์™€ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

 

๐Ÿ’ก ์ž…๋ ฅ


์ฒซ์งธ ์ค„์—๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋Š” 100 ์ดํ•˜์ด๊ณ  ๊ฐ ์ปดํ“จํ„ฐ์—๋Š” 1๋ฒˆ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ ์Œ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด์–ด์„œ ๊ทธ ์ˆ˜๋งŒํผ ํ•œ ์ค„์— ํ•œ ์Œ์”ฉ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฒˆํ˜ธ ์Œ์ด ์ฃผ์–ด์ง„๋‹ค.

 

 

 

 

๐Ÿ“Œ ์ถœ๋ ฅ


1๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ ธ์„ ๋•Œ, 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ฒซ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๐Ÿ™‹‍โ™€๏ธ ํ’€์–ด๋ณด์ž~


com = int(input())
cnt = 0
adj = [[] for _ in range(com+1)]
visited = [False] * (com+1)

for i in range(int(input())):
  x, y = map(int, input().split())
  adj[x].append(y)
  adj[y].append(x)

def dfs(v):
  visited[v] = True
  for e in adj[v]:
    if not visited[e]:
      dfs(e)
  
dfs(1)

for i in range(len(visited)):
  if visited[i] == True:
    cnt += 1
    
print(cnt-1)

 

 

2. BFS๋กœ ํ’€์–ด๋ณด๋ฉด,,,

 

from collections import deque

com = int(input())
cnt = 0
adj = [[] for _ in range(com+1)]
visited = [False] * (com+1)

for i in range(int(input())):
  x, y = map(int, input().split())
  adj[x].append(y)
  adj[y].append(x)

def bfs(v):
  q = deque([v])
  visited[v] = True
  while q:
    v = q.popleft()
    for e in adj[v]:
      if not visited[e]:
        q.append(e)
        visited[e]= True

  
bfs(1)

for i in range(len(visited)):
  if visited[i] == True:
    cnt += 1

print(cnt-1)

 

BOJ 14719

๐Ÿ•ต๏ธ‍โ™€๏ธ ๋ฌธ์ œ


2์ฐจ์› ์„ธ๊ณ„์— ๋ธ”๋ก์ด ์Œ“์—ฌ์žˆ๋‹ค. ๋น„๊ฐ€ ์˜ค๋ฉด ๋ธ”๋ก ์‚ฌ์ด์— ๋น—๋ฌผ์ด ๊ณ ์ธ๋‹ค.๋น„๋Š” ์ถฉ๋ถ„ํžˆ ๋งŽ์ด ์˜จ๋‹ค. ๊ณ ์ด๋Š” ๋น—๋ฌผ์˜ ์ด๋Ÿ‰์€ ์–ผ๋งˆ์ผ๊นŒ?

 

 

๐Ÿ’ก ์ž…๋ ฅ


์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” 2์ฐจ์› ์„ธ๊ณ„์˜ ์„ธ๋กœ ๊ธธ์ด H๊ณผ 2์ฐจ์› ์„ธ๊ณ„์˜ ๊ฐ€๋กœ ๊ธธ์ด W๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ H, W ≤ 500)

๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ธ”๋ก์ด ์Œ“์ธ ๋†’์ด๋ฅผ ์˜๋ฏธํ•˜๋Š” 0์ด์ƒ H์ดํ•˜์˜ ์ •์ˆ˜๊ฐ€ 2์ฐจ์› ์„ธ๊ณ„์˜ ๋งจ ์™ผ์ชฝ ์œ„์น˜๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ W๊ฐœ ์ฃผ์–ด์ง„๋‹ค.

๋”ฐ๋ผ์„œ ๋ธ”๋ก ๋‚ด๋ถ€์˜ ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธธ ์ˆ˜ ์—†๋‹ค. ๋˜ 2์ฐจ์› ์„ธ๊ณ„์˜ ๋ฐ”๋‹ฅ์€ ํ•ญ์ƒ ๋ง‰ํ˜€์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ๋„ ์ข‹๋‹ค.

 

 

 

 

๐Ÿ“Œ ์ถœ๋ ฅ


2์ฐจ์› ์„ธ๊ณ„์—์„œ๋Š” ํ•œ ์นธ์˜ ์šฉ๋Ÿ‰์€ 1์ด๋‹ค. ๊ณ ์ด๋Š” ๋น—๋ฌผ์˜ ์ด๋Ÿ‰์„ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

๋น—๋ฌผ์ด ์ „ํ˜€ ๊ณ ์ด์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

 

 

๐Ÿ™‹‍โ™€๏ธ ํ’€์–ด๋ณด์ž~


๋น—๋ฌผ์ด ๊ณ ์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋‘ฅ์ด ํ•„์š”ํ•˜๋‹ค. 

์ด ๊ธฐ๋‘ฅ์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธฐ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์ž.

 

์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด max์ธ 4๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์šฐ์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’์ธ 3๊ณผ 2์˜ ๊ฐ’์ด ์ค‘์š”ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์™ผ์ชฝ์€ 3์„ ๊ธฐ์ค€์œผ๋กœ ๋น—๋ฌผ์ด ๋ฐ›์•„์ง€๊ณ  ์˜ค๋ฅธ์ชฝ์€ 2๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น—๋ฌผ์ด ๋ฐ›์•„์ง€๊ธฐ ๋•Œ๋ฌธ~

 

๋” ์ž์„ธํ•˜๊ฒŒ ๋ณด์ž๋ฉด..

๊ฐ ์ž๋ฆฌ๋ฅผ i๋กœ ๋ณด๊ณ  0๋ถ€ํ„ฐ 7๊นŒ์ง€ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ฒผ์„ ๋•Œ 2๋ฒˆ์งธ ๋ธ”๋Ÿญ์„ ๋ณด์ž.

i=2๋ฒˆ์งธ ๋ธ”๋Ÿญ์€ 2๊ฐœ๋กœ ์ด ๋ธ”๋Ÿญ์„ ๊ธฐ์ค€์œผ๋กœ ๋น—๋ฌผ ๊ธฐ๋‘ฅ์ด ๋˜์–ด์ค„ ์ขŒ์šฐ์˜ max ์ˆซ์ž๋ฅผ ์‚ดํŽด๋ณด๋ฉด 3๊ณผ 4์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ max์ค‘ ์ž‘์€ ์ˆ˜๊ฐ€ ๊ธฐ์ค€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— 3์ด๋ผ๋Š” ์ˆซ์ž๋ฅผ ์ด์šฉํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค.

 

 

์ •๋ฆฌํ•˜์ž๋ฉด~

  • ์–‘์ชฝ์— ๋” ๋†’์€ ๋ธ”๋Ÿญ์ด ์กด์žฌํ•˜๋ฉด ๋น—๋ฌผ์ด ๊ณ ์ž„
  • ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ํ˜„์žฌ์˜ ๋ธ”๋Ÿญ ๊ธฐ์ค€ left_max์™€ right_max๋ฅผ ๊ตฌํ•˜๊ณ  ์ด ๋‘ ๊ฐ’์ค‘ ์ž‘์€ ์ˆ˜๋ฅผ ๊ตฌํ•จ
    • ๊ตฌํ•ด์ง„ ์ˆ˜ - ํ˜„์žฌ ๋ธ”๋Ÿญ์˜ ์ˆ˜ ๊ฐ€ ๋น—๋ฌผ์ด ๋‹ด๊ธธ ์นธ์ˆ˜๋‹ค.
    • ์ฒซ ๋ธ”๋Ÿญ๊ณผ ๋งˆ์ง€๋ง‰ ๋ธ”๋Ÿญ์€ ๋ณผํ•„์š” ์—†๋‹ค. (๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ์ด์šฉํ•˜์ž๋ฉด, i=0์ผ ๋•Œ์™€ i=7์ผ ๋•Œ)

 

# ๋น—๋ฌผ

# ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ค€๋‹ค.
H, W = map(int, input().split())
block = list(map(int, input().split()))
answer = 0

# ๋งจ ์•ž๋’ค๋ฅผ ์ œ์™ธํ•œ for๋ฌธ์„ ๋Œ๋ฉด์„œ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์—์„œ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
for i in range(1, W-1):
    left_max = max(block[:i]) # ํ˜„์žฌ ๋ธ”๋Ÿญ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์—์„œ max ๊ฐ’ ์ฐพ๊ธฐ
    right_max = max(block[i+1:]) # ํ˜„์žฌ ๋ธ”๋Ÿญ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์—์„œ max ๊ฐ’ ์ฐพ๊ธฐ
    m = min(left_max, right_max) #left_max์™€ right_max ์ค‘ ์ž‘์€ ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋‹ด์ž.
    
    # ํ˜„์žฌ ๋ธ”๋Ÿญ์ด ์ง€์ •ํ•œ ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋น—๋ฌผ์ด ๊ณ ์ธ๋‹ค.
    if block[i] < m:
        answer += m - block[i]

print(answer)

 

 

BOJ 1149

๐Ÿ•ต๏ธ‍โ™€๏ธ ๋ฌธ์ œ


RGB๊ฑฐ๋ฆฌ์—๋Š” ์ง‘์ด N๊ฐœ ์žˆ๋‹ค. ๊ฑฐ๋ฆฌ๋Š” ์„ ๋ถ„์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ N๋ฒˆ ์ง‘์ด ์ˆœ์„œ๋Œ€๋กœ ์žˆ๋‹ค.

์ง‘์€ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘ ์ค‘ ํ•˜๋‚˜์˜ ์ƒ‰์œผ๋กœ ์น ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ๊ทœ์น™์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

  • 1๋ฒˆ ์ง‘์˜ ์ƒ‰์€ 2๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • N๋ฒˆ ์ง‘์˜ ์ƒ‰์€ N-1๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • i(2 ≤ i ≤ N-1)๋ฒˆ ์ง‘์˜ ์ƒ‰์€ i-1๋ฒˆ, i+1๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

 

 

๐Ÿ’ก ์ž…๋ ฅ


์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

 

 

๐Ÿ“Œ ์ถœ๋ ฅ


  • ์ฒซ์งธ ์ค„์— ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๐Ÿ™‹‍โ™€๏ธ ํ’€์–ด๋ณด์ž~


๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ ‘๊ทผํ•ด์„œ Memoization์„ ์‚ฌ์šฉํ•˜์ž.

 

2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ฐ ์ž๋ฆฌ๋งˆ๋‹ค RGB์˜ ๋น„์šฉ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ž.

just like... -> [ [ 1๋ฒˆ ์ง‘์˜ R๋น„์šฉ, 1๋ฒˆ ์ง‘์˜ G๋น„์šฉ, 1๋ฒˆ ์ง‘์˜ B๋น„์šฉ ] , [ 2๋ฒˆ ์ง‘์˜ R๋น„์šฉ, ....

 

์ ํ™”์‹์„ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ i๋ฒˆ์งธ์˜ ์ง‘๊ณผ ๊ทธ ์•ž๋’ค์˜ i-1๋ฒˆ์งธ ์ง‘๊ณผ i+1๋ฒˆ์งธ ์ง‘์„ ์ƒ๊ฐํ•ด๋ณด์ž.

i+1๋ฒˆ์งธ ์ง‘์€ i๋ฒˆ์งธ ์ง‘์˜ ์ƒ‰์— ์˜ํ–ฅ์„ ๋ฐ›์ง€๋งŒ i-1๋ฒˆ์งธ ์ง‘์˜ ์ƒ‰์—๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

 

์ด ๊ฐ™์€ ์ƒํ™ฉ์„ ์ ํ™”์‹์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์ž. i์™€ i+1๋งŒ ์ƒ๊ฐํ•ด์ฃผ๋ฉด๋œ๋‹ค~

  1. i+1๋ฒˆ์งธ ์ง‘์ด R์ผ ๋•Œ, i-1์€์€ G๋‚˜ B ์ค‘ ๋” ์ ์€ ๋น„์šฉ์„ ๊ฐ–๋Š” ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.
  2. i+1๋ฒˆ์งธ ์ง‘์ด G์ผ ๋•Œ, i-1์€์€ R๋‚˜ B ์ค‘ ๋” ์ ์€ ๋น„์šฉ์„ ๊ฐ–๋Š” ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.
  3. i+1๋ฒˆ์งธ ์ง‘์ด B์ผ ๋•Œ, i-1์€์€ R๋‚˜ G ์ค‘ ๋” ์ ์€ ๋น„์šฉ์„ ๊ฐ–๋Š” ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

# RGB

# n : ์ง‘์˜ ์ˆ˜
n = int(input())

# ์ดˆ๊ธฐ์„ธํŒ… 0์œผ๋กœ ๋‹ค ๊น”์•„๋†“๊ฑฐ๋ผ
dp = [[0, 0, 0] for _ in range(n)]

for i in range(n):
    # ์šฐ์„  ๋จผ์ € ์ž…๋ ฅ๋ฐ›์Œ
    cost = list(map(int, input().split()))

    # ์ฒซ ์ž…๋ ฅ์ธ ๊ฒฝ์šฐ, ๊ทธ๋ƒฅ cost๋ฅผ ๋‹ด์•„์ฃผ์„ธ์š”.
    if i == 0:
        dp[0] = cost
    else:
        # ์ ํ™”์‹ ๋„ฃ์–ด์ฃผ์„ธํšจ
        dp[i][0] = min(dp[i-1][1], dp[i-1][2]) + cost[0] # i๋ฒˆ์งธ์ง‘์ด R์ผ๊ฒฝ์šฐ
        dp[i][1] = min(dp[i-1][0], dp[i-1][2]) + cost[1] # i๋ฒˆ์งธ์ง‘์ด G์ผ๊ฒฝ์šฐ
        dp[i][2] = min(dp[i-1][0], dp[i-1][1]) + cost[2] # i๋ฒˆ์งธ์ง‘์ด B์ผ๊ฒฝ์šฐ

# dp ๋ฆฌ์ŠคํŠธ์˜ n-1๋ฒˆ์งธ์— ์žˆ๋Š” ๋ˆ„์ ๋œ RGB ๋น„์šฉ ์ค‘ ๊ฐ€์žฅ ์ตœ์†Œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
print(min(dp[n-1]))

 

ํ’€์ด

๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

 

lambda๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ •ํ•ด์ฃผ๋Š”๋ฐ, ๋จผ์ € ์ฒซ๋ฒˆ์งธ ์ธ์ž(x[0]) ์ฆ‰, x์ค„๋ถ€ํ„ฐ ์ •๋ ฌ์„ ํ•˜๊ณ 

๊ทธ๋‹ค์Œ ๋‘๋ฒˆ์งธ ์ธ์ž์ธ(x[1]) y์ค„์„ ์ •๋ ฌํ•ด์ค€๋‹ค.

 

์ฝ”๋“œ ์ฐธ์กฐ!

import sys
n = int(sys.stdin.readline())
so = []
for i in range(n):
    so.append(list(map(int, sys.stdin.readline().split())))
so.sort(key=lambda x: (x[0], x[1]))
for i in so:
    print(i[0], i[1])

 

 

 

python ์ •๋ ฌํ•จ์ˆ˜ ์ฐธ์กฐ!

1. sort

์›๋ณธ์„ ๋ณ€ํ˜•์‹œ์ผœ ์ •๋ ฌํ•œ๋‹ค. '๋ณ€์ˆ˜. sort( )' ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ.

์ •๋ ฌ ๊ธฐ์ค€์€ ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ, ๊ฐ€๋‚˜๋‹ค์ˆœ์ด๊ณ  ์ˆซ์ž๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

2. sorted

์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜. ์›ํ˜•์„ ๋ณ€ํ˜•์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ๊ด„ํ˜ธ( ) ์•ˆ์— ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ iterable ์ž๋ฃŒํ˜•์„ ์ž…๋ ฅํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ์ •๋ ฌ ๊ธฐ์ค€์€ ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ, ๊ฐ€๋‚˜๋‹ค์ˆœ์ด๊ณ  ์ˆซ์ž๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

 

3. Parameter

sort, sorted ๋ชจ๋‘ key, reverse ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

 

3-1. reverse

bool๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ reverse=False(์˜ค๋ฆ„์ฐจ์ˆœ)์ด๋‹ค.

reverse=True๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3-2. key

์ •๋ ฌ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ๋„ฃ๋Š”๋‹ค. lambda๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

key ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์€ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‹ค. 

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ, ํŠœํ”Œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํ’€์ด

pypy3์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค~!
  1. N์œผ๋กœ ๊ฐœ์ˆ˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค.
  2. numbers ๋ผ๋Š” ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  3. ๋ฐ›์•„์ค€ N ํšŸ์ˆ˜๋งŒํผ for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉฐ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  4. sortํ•จ์ˆ˜๋ฅผ ์จ์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ด์ค€๋‹ค.
  5. ์ถœ๋ ฅ์€ '\n'.join(๋ฆฌ์ŠคํŠธ) : \n๊ณผ ๊ฐ’์„ ๋„ฃ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์ค€๋‹ค.

 

import sys
input = sys.stdin.readline

N = int(input())
numbers = []

for _ in range(N):
    numbers.append(int(input()))

numbers.sort()
print('\n'.join(map(str, numbers)))

 

+ Recent posts