๐Ÿ”— Algorithm

    [Python] ๋ฐฑ์ค€ 1208

    [Python] ๋ฐฑ์ค€ 1208

    ๊ตฌ๊ธ€๋ง์ด ์ž˜ ์•ˆ๋ผ์„œ...์ง์ ‘ ์“ฐ๋Š” ๋ฆฌ๋ทฐ ๐Ÿ˜… 1182๋ฒˆ ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ๊ณผ ๊ฐ™์€ ์œ ํ˜•์˜ ๋ฌธ์ œ์ด์ง€๋งŒ ๋ฒ”์œ„์™€ ์‹œ๊ฐ„์ œํ•œ ๋“ฑ์œผ๋กœ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค. n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ์ˆ˜์—ด์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2**n ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด ๋ฌธ์ œ์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๋Š” n==40์ด๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ 2**40์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ  ๋ฐ˜์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ตœ์•…์˜ ๊ฒฝ์šฐ (2**20)*2์ด๋‹ค. (2**20)*2 = 2097152 VS 2**40 = 1099511627776 ํšจ์œจ ใ…‡ใ…ˆ? ๋‚˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ–ˆ๋‹ค. (์ด์œ ๋Š” ๋’ค์—) key : ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ value : ํ•ด๋‹น ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด ๋‚˜์˜จ ํšŸ์ˆ˜ ์˜ˆ์ œ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ์ฝ”๋“œ ์„ค๋ช…์„ ํ•˜์ž๋ฉด ์šฐ์„  l=[..

    [Python] ๋ฐฑ์ค€ 1167, 1967

    [Python] ๋ฐฑ์ค€ 1167, 1967

    ์ž…๋ ฅ๊ฐ’์˜ ์ฐจ์ด ์™ธ์—๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์ด๋‹ค. ๋จผ์ € ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ์ฐพ๋Š”๋ฐ์—๋Š” rule์ด ์žˆ๋‹ค. โœ” ํŠธ๋ฆฌ์—์„œ ์ž„์˜์˜ ๋…ธ๋“œ(A)๋ฅผ ์„ ํƒํ•ด ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. -> B โœ” B์—์„œ ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. -> C โœ” ๊ทธ๋Ÿฌ๋ฉด B์™€ C์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋ฉ€๋‹ค. (==์ง€๋ฆ„) ์ด ๊ทœ์น™์„ ์•Œ๋ฉด ์‰ฝ๊ฒŒ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ๋ชจ๋ฅด๋ฉด ใ… ใ…  ์‚ฝ์งˆ ํ•˜๋‹ˆ๊นŒ ์•Œ๊ณ ์žˆ์ž... Answer 1167 import sys from collections import defaultdict from collections import deque n=int(sys.stdin.readline()) dic=defaultdict(list) for i in range(n): l=list(map(int,sys.stdin.readline().split())) a..

    [Python] ๋ฐฑ์ค€ 10917

    [Python] ๋ฐฑ์ค€ 10917

    ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ๋Š” ์Šค์Šค๋กœ ์†”๋ธŒํ•ด๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด๋ž‘ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋Š”๋ฐ ํ‘ผ ์‚ฌ๋žŒ์ด ๋ณ„๋กœ ์—†์–ด์„œ ๊ฒ€์ƒ‰ํ•ด๋„ ์•ˆ๋‚˜์™€์„œ ์ŠฌํŽ๋‹น... ๋‚ด ๋‹ต์ด ์ตœ์ ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ ์ผ๋‹จ ํ’€์—ˆ๊ณ  ํ‘ผ ์‚ฌ๋žŒ์ด ๋ณ„๋กœ ์—†์–ด์„œ ๋‚˜๋ผ๋„ ๋ฆฌ๋ทฐ๋ฅผ ์จ๋†”์•ผ์ง€,,๐Ÿ˜‡ ์ผ๋‹จ ๋‚˜๋Š” BFS + ์šฐ์„ ์ˆœ์œ„Q๋กœ ํ’€์—ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  x๋ฅผ key๋กœ y๋ฅผ value๋กœ ๋‘๊ณ , value๋Š” ์šฐ์„ ์ˆœ์œ„Q ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ €์žฅํ–ˆ๋‹ค. (๊ฟˆ์€ ๋” ํฐ ์ˆ˜๋กœ ์ด๋™ํ•˜๊ณ  N์ด ๊ฐ€์žฅ ํฌ๊ธฐ ๋•Œ๋ฌธ์— N์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๊ทธ๋งŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๊ธฐ ์œ„ํ•จ) ๊ทธ๋ฆฌ๊ณ  queue์— ํ˜„์žฌ ์œ„์น˜์™€ ํ˜„์žฌ ์ƒํ™ฉ์ด ๋ฐ”๋€ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋ฉฐ BFS๋ฅผ ํ•œ๋‹ค. N์„ ๋งŒ๋‚˜๋ฉด ๊ทธ๋งŒํ•œ๋‹ค. (bfs๋‹ˆ๊นŒ ์ฒ˜์Œ๋งŒ๋‚  ๋•Œ ์ตœ์†Œ) Result import sys from collections import defaultdi..

    [Python] ๋ฐฑ์ค€ 2089

    [Python] ๋ฐฑ์ค€ 2089

    ๋•๋ถ„์— ํŒŒ์ด์ฌ์—์„œ a//b๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. import sys n = int(sys.stdin.readline()) if n == 0: print(0) else: res = [] while n != 0: if n%(-2) == 0: res.append('0') n = n//(-2) else: res.append('1') n = n//(-2) +1 print(''.join(reversed(res)))

    [Python] ๋ฐฑ์ค€ 1442

    [Python] ๋ฐฑ์ค€ 1442

    solution์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ›์€ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ n-k๊ฐœ ๋” ๋งŒ๋“ค์–ด ์ฃผ๊ณ  ๊ทธ ์ˆ˜๋“ค๋กœ ์ •๋ ฌํ•˜๋ฉด ๋œ๋‹ค. ๋‹จ, ์ •๋ ฌํ•  ๋•Œ ๋ฌธ์ œ์—์„œ ์ค€ ์˜ˆ์ œ์™€ ๊ฐ™์ด 7 3 2 ์ฒ˜๋Ÿผ ์ฃผ์–ด์ง„ ์ˆซ์ž๊ฐ€ ๊ฐ™์€ ์ž๋ฆฌ ์ˆซ์ž๋ผ๋ฉด ์ƒ๊ด€ ์—†์ง€๋งŒ 9 90 990 ๊ณผ ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๊ฐ€์žฅ ํฐ ์ˆ˜ ๋ถ€ํ„ฐ ์ •๋ ฌํ•˜๋ฉด 990 90 9 ์ด์ง€๋งŒ ์‹ค์ œ๋กœ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” 9 990 90 ์™€ ๊ฐ™์ด ์ •๋ ฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ์—์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋‹ค! num.sort(key = lambda x: x*10, reverse=True) num์˜ ์ˆซ์ž๋“ค์€ type์ด ๋ฌธ์ž์—ด์ด๋‹ค. ์ด ๋ฌธ์ œ์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ 1,000,000,000 ์ด๋ฏ€๋กœ ์ˆซ์ž์˜ ์ตœ๋Œ€๊ธธ์ด๊ฐ€ 10์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ธธ์ด 10๋งŒํผ๋งŒ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 20..

    [Python] ๋ฐฑ์ค€ 6549

    [Python] ๋ฐฑ์ค€ 6549

    ๊ตํ›ˆ : ํ”Œ๋ž˜๋ผ๊ณ  ๊ฒ๋จน์ง€ ๋ง์ž stack์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค stack ์‚ฝ์ž… : index์™€ ๋†’์ด(h) ์›๋ฆฌ : ํ˜„์žฌ index๋ณด๋‹ค stack์— ์žˆ๋Š” index(๋‚˜๋ณด๋‹ค ์™ผ์ชฝ)์˜ h๊ฐ€ ๋” ํฌ๋ฉด ํ˜„์žฌ index์˜ h๊ฐ’์œผ๋กœ ์™ผ์ชฝ๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”๋ณด๊ธฐ ์—ฌ๊ธฐ์„œ ์˜ค๋ฅธ์ชฝ์˜ ๋†’์ด(2) ๋กœ ์™ผ์ชฝ์„ ํฌํ•จํ•˜์—ฌ ๋„“์ด๊ฐ€ 4๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด stack์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค! import sys while True: #๋งˆ์ง€๋ง‰์— stack์— ์žˆ๋Š” ๊ฐ’์„๋“ค ๋‹ค ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด ๋งˆ์ง€๋ง‰ h๊ฐ’์€ 0 h = list(map(int, sys.stdin.readline().split())) + [0] if h[0] == 0: break n = h[0] stack = [(1,h[1])] res = 0 for i in range(2,n..

    [Python] ๋ฐฑ์ค€ 2606

    [Python] ๋ฐฑ์ค€ 2606

    BFS๋˜๋Š” DFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ๋‹ค. ๋จผ์ €, ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๋„คํŠธ์›Œํฌ๋Š” ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ์ด๋ฏ€๋กœ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๋”•์…”๋„ˆ๋ฆฌ์— ๋‘ ๋ฒˆ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ net = {} for i in range(n): a, b = map(int, input().split()) if a in net : net[a].append(b) else : net[a] = [b] if b in net : net[b].append(a) else : net[b] = [a] ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ BFS๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. visit์—์„œ 1์„ ๋นผ๋ฉด 1๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ปดํ“จํ„ฐ๋งŒ ๋‚จ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— len(visit)-1์„ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅํ–ˆ๋‹ค. ์ „์ฒด์ฝ”๋“œ m = int(input())..

    [Python] ๋ฐฑ์ค€ 1260

    [Python] ๋ฐฑ์ค€ 1260

    ๋‹จ์ˆœํžˆ DFS์™€ BFS๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ graph = [[0]*(N+1) for x in range(N+1)] for i in range(M): temp = list(map(int, input().split(' '))) graph[temp[0]][temp[1]] = 1 graph[temp[1]][temp[0]] = 1 ๊ทธ๋ž˜ํ”„๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์„ 1๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๊ฐ„์„ ์ด 1๊ณผ 2๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค๋ฉด, 2์ฐจ์› ๋ฐฐ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. DFS ๊ตฌํ˜„ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ dfs๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋ฉฐ, recursive๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. graph์—์„œ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค๊ณ , ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹นํ•˜..

    [Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS

    [Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS

    ๊ฐœ์ธ์ ์œผ๋กœ ์–ด๋ ค์›Œ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜,, ์•Œ๊ณ ๋ฆฌ์ฆ˜ BFS๋Š” FIFO๋ฅผ ์›์น™์œผ๋กœ ํ•˜๋Š” Queue๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋Š” ์ฒซ ๋…ธ๋“œ(root)๋ฅผ queue์— ๋„ฃ๊ณ  ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค. A. queue์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค. B. ๊บผ๋‚ธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  queue์— ๋„ฃ๋Š”๋‹ค. queue์— ๋…ธ๋“œ๊ฐ€ ์—†์–ด์งˆ ๋•Œ ๊นŒ์ง€ AB๋ฐ˜๋ณต ๊ตฌํ˜„ def bfs(graph, root): visit = list() queue = [root] #AB๋ฐ˜๋ณต while queue: temp = queue.pop(0) if temp not in visit: print(temp) visit.append(temp) queue.extend(graph[temp]) ์•Œ๊ณ ๋ฆฌ์ฆ˜ DFS๋Š” LIFO๋ฅผ ์›์น™์œผ๋กœ ํ•˜๋Š” Stack์œผ๋กœ ๊ตฌํ˜„..

    [Python] ๋ฐฑ์ค€ 2231

    [Python] ๋ฐฑ์ค€ 2231

    ์™„์ „ํƒ์ƒ‰ํ•˜๋Š” brute force ๋ฌธ์ œ์ด๋‹ค. ๋จผ์ € 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ชจ๋‘ ๊ณ ๋ คํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์žˆ๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ œ์ถœํ•œ ๋‹ต์ด๊ธฐ๋„ ํ•˜๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 256์˜ ์ƒ์„ฑ์ž๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด 1๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด ์ƒ์„ฑ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. import sys N = int(input()) def Constructor(M): result = M devide = list(str(M)) for i in devide: result += int(i) return result if N < 10 : print(0) else: num = 10 while M