๐Ÿšถโ€โ™‚๏ธRoad to ์ฝ”ํ…Œ(1) - ๊ธฐ์ดˆ ์ฝ”๋“œ ์ž‘์„ฑ ์š”๋ น

์•ˆํƒœํ˜„ยท2024๋…„ 12์›” 11์ผ

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
1/15

๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ BaaarkingDog๋‹˜์˜ ์‹ค์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

[์ถ”๊ฐ€] ์šฉ๊ฐํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์ •์˜ : ์ž…๋ ฅ์˜ ํฌ๊ธฐ์™€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ์˜๋ฏธ
    ์ปดํ“จํ„ฐ 1์ดˆ ์—ฐ์‚ฐ๋Ÿ‰ 3-5์–ต๊ฐœ(๋ฌผ๋ก , ๋‹จ์ˆœ์—ฐ์‚ฐ๊ณผ ๋ณต์žกํ•œ ์—ฐ์‚ฐ๊ณผ์˜ ํšŸ์ˆ˜ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ์— ์ฃผ์˜)
    -> ์‹œ๊ฐ„ ์ œํ•œ์ด 1์ดˆ๋ผ๊ณ  ํ•˜๋ฉด "ํ”„๋กœ๊ทธ๋žจ์ด 3-5์–ต ๋ฒˆ์˜ ์—ฐ์‚ฐ ์•ˆ์— ๋‹ต์„ ๋‚ด๊ณ  ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค"


    -> ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด ๊ฐ€์šด๋ฐ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ๋ฌผ์–ด๋ด์„œ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ๋‹ค ๋ณด๋ฉด ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. logN์— ๋น„๋ก€ํ•œ๋‹ค.

  • ๊ธฐ์ค€์ด ์ ˆ๋Œ€์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๊ณต๊ฐ„ ๋ณต์žก๋„

  • ์ •์˜ : ์ž…๋ ฅ์˜ ํฌ๊ธฐ์™€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณต๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„

ํฌ๊ธฐ N์งœ๋ฆฌ 2์ฐจ์› ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋ฉด O(Nยฒ)์ด๊ณ , ๋”ฐ๋กœ ๋ฐฐ์—ด์ด ํ•„์š” ์—†์œผ๋ฉด O(1)
๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด 512MB์ผ ๋•Œ int ๋ณ€์ˆ˜๋ฅผ ๋Œ€๋žต 1.2์–ต๊ฐœ ์ •๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ


ํŒŒ์ด์ฌ์—๋งŒ ํ•ด๋‹น

์ž…์ถœ๋ ฅ

  from sys import stdin, stdout
  input = stdin.readline 
  print = stdout.write

๋ฐฐ์—ด

  • 2์ฐจ์› ๋ฐฐ์—ด ๋ฐ›๊ธฐ
MAP = [list(map(int,input().split())) for _ in range(int(input()))]

์ง„๋ฒ•

  • 2์ง„์ˆ˜ : bin(num) -> ๋ฐ˜๋Œ€ : int('0b111100', 2)
  • 8์ง„์ˆ˜ : oct(num) -> ๋ฐ˜๋Œ€ : int('0o74', 8)
  • 16์ง„์ˆ˜ : hex(num) -> ๋ฐ˜๋Œ€ : int('0x3c', 8)

itertools ํ™œ์šฉ ์กฐํ•ฉ

from itertools import combinations  
print(list(combinations([1, 2, 3, 4], 3)))

์ˆœ์—ด

from itertools import combinations  
print(list(combinations([1, 2, 3, 4], 3)))

์–•์€ ๋ณต์‚ฌ(shallow copy)์™€ ๊นŠ์€ ๋ณต์‚ฌ(deep copy)

์›๋ณธ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•  ๋•Œ ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ์žˆ๋‹ค. ๋ฌด์ž‘์ • ๋ณต์‚ฌ(a=b) ๋“ฑ์œผ๋กœ ๋ณต์‚ฌ๋ฅผ ํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด๊ฐ€ ํ•ธ๋“ค๋ง๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์„œ ํฐ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
ํŒŒ์ด์ฌ์—์„œ ๋ณ€์ˆ˜๋Š” ์ž์ฒด ์ €์žฅ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์ง€ ์•Š์œผ๋ฉฐ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐœ๋…์ด๋‹ค.
์—ฌ๊ธฐ์„œ Mutable(๊ฐ€๋ณ€)๊ณผ Immutable(๊ณ ์ •)์˜ ๊ฐœ๋…์ด ๋‚˜์˜จ๋‹ค.

๋Œ€๋ถ€๋ถ„ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋Š” mutuableํ•œ ๊ฐ์ฒด์ด๋‹ค.

ํ•˜์ง€๋งŒ str์€ immutableํ•œ ๊ฐ์ฒด์ด๋ฉฐ ๋ณ€์ˆ˜์— ์ฒซ ๊ธ€์ž ๋ณ€๊ฒฝ ์‹œ๋„ํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒํ•œ๋‹ค. s์— ๋‹ค๋ฅธ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด, id๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์žฌํ• ๋‹น์€ ์• ์ดˆ์— ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ mutable๊ณผ immutable๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. list๋˜ํ•œ ๊ฐ’์„ ์žฌํ• ๋‹นํ•˜๋ฉด id๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

  • mutuableํ•œ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜ ๊ฐ„ ๋Œ€์ž….
    list๋ฅผ ์–•์€ ๋ณต์‚ฌํ•ด์„œ b์— a๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๊ฐ’์ด ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  b๋ฅผ ๋ณ€๊ฒฝ์‹œ a๋„ ๋ฐ”๋€๋‹ค. mutuableํ•œ ๊ฐ์ฒด ๋˜ํ•œ ๊ฐ™์€ ํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค.
>>> a = [1, 2, 3]
>>> b = a # shallow copy
>>> b[0]= 5
>>> a
[5, 2, 3]
>>> b
[5, 2, 3]
>>> id(a)
4396179528
>>> id(b)
4396179528
  • immutableํ•œ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜๊ฐ„ ๋Œ€์ž…
    ๋ฌธ์ž์—ด์˜ ์–•์€ ๋ณต์‚ฌ๋ฅผ ํ™•์ธํ•ด๋ณด์ž. b๋ฅผ a์— ํ• ๋‹นํ•˜๋ฉด ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ b์— ๋‹ค๋ฅธ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ์žฌํ• ๋‹น์ด ์ด๋ฃจ์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
>>> a = "abc"
>>> b = a
>>> a
'abc'
>>> b
'abc'
>>> id(a)
4387454680
>>> id(b)
4387454680
>>> b = "abcd"
>>> a
'abc'
>>> b
'abcd'
>>> id(a)
4387454680
>>> id(b)
4396456400

์–•์€ ๋ณต์‚ฌ(shallow copy)

>>> a = [1,2,3]
>>> b = a[:]
>>> id(a)
4396179528
>>> id(b)
4393788808
>>> a == b
True
>>> a is b
False
>>> b[0] = 5
>>> a
[1, 2, 3]
>>> b
[5, 2, 3]

์Šฌ๋ผ์ด์‹ฑ ๋˜ํ•œ ์–•์€ ๋ณต์‚ฌ์— ํ•ด๋‹น๋œ๋‹ค. mutuable๊ฐ์ฒด ์•ˆ์— mutuable ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
id(a) ๊ฐ’๊ณผ id(b) ๊ฐ’์€ ๋‹ค๋ฅด๊ฒŒ ๋˜์—ˆ์ง€๋งŒ, ๊ทธ ๋‚ด๋ถ€์˜ ๊ฐ์ฒด id(a[0])๊ณผ id(b[0])์€ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋‹ค.
a[1] ์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด b[1]๋„ ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋œ๋‹ค.

>>> a[1].append(5)
>>> a
[[8, 9], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]
>>> id(a[1])
4396389896
>>> id(b[1])
4396389896

copy ๋ชจ๋“ˆ์˜ copy ๋ฉ”์†Œ๋“œ ๋˜ํ•œ ์–•์€ ๋ณต์‚ฌ์ด๋‹ค.

>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.copy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]

๊นŠ์€ ๋ณต์‚ฌ (deep copy)

๋‚ด๋ถ€์— ๊ฐ์ฒด๋“ค๊นŒ์ง€ ๋ชจ๋‘ ์ƒˆ๋กญ๊ฒŒ copy๋œ๋‹ค.

>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.deepcopy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4]]

์ถœ์ฒ˜
https://blog.encrypted.gg/923
https://covenant.tistory.com/143

profile
๊ณ ๊ฐ์—๊ฒŒ ์‹ ๋ขฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์•ˆํƒœํ˜„์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€