๐Ÿ“ Algorithm

์„œ๊ฐ• ๊ทธ๋ผ์šด๋“œhttps://www.acmicpc.net/problem/14938    ํ’€์ด๋‹ค์ต์ŠคํŠธ๋ผ 1. 1๋ถ€ํ„ฐ N๊นŒ์ง€ BFS ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ตœ๋Œ“๊ฐ’ ์—…๋ฐ์ดํŠธ2. ๋‹ค์Œ ํ์˜ cost ๋”ํ–ˆ์„ ๋•Œ ์ˆ˜์ƒ‰๋ฒ”์œ„ ์•ˆ์ด๊ณ , ๋‹ค์Œ ํ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋”ํ–ˆ์„ ๋•Œ ํ˜„์žฌ ์•„์ดํ…œ ๊ฐฏ์ˆ˜๋ณด๋‹ค ํฌ๋‹ค๋ฉด ํ์— ์ถ”๊ฐ€ํ•˜๊ธฐ3. ํ์— ๋“ค์–ด๊ฐ„ ์•„์ดํ…œ๋“ค์€ ์ „๋ถ€ ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Set๋กœ ๊ด€๋ฆฌ. bfs ๋๋‚œ ํ›„ Set์— ๋“ค์–ด์žˆ๋Š” ์•„์ดํ…œ์— ํ•ด๋‹นํ•˜๋Š” ๋น„์šฉ ์ถ”๊ฐ€ํ•ด์„œ bfs ๋ฐ˜ํ™˜  ์†Œ์Šค์ฝ”๋“œlet NMR = readLine()!.split(separator: " ").map { Int($0)! }let N = NMR[0], M = NMR[1], R = NMR[2]var items: [Int] = [0]items += (readLine()!.split(separato..
๊ฐ„์„  ์ด์–ด๊ฐ€๊ธฐ2 ๋ฌธ์ œhttps://www.acmicpc.net/problem/14284     ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.bfs๋กœ ์ˆœํšŒํ•˜๋ฉฐ, dp ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค. (๋ง์€ ์‰ฝ๋‹ค..!) ํ˜„์žฌ ์ •์ ๊ณผ ๋‹ค์Œ ๋ฐฉ๋ฌธํ•  ์ •์ ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ,dp[๋‹ค์Œ์ •์ ]์˜ ๊ฐ€์ค‘์น˜๊ฐ€ dp[ํ˜„์žฌ์ •์ ]์˜ ๊ฐ€์ค‘์น˜+๋‹ค์Œ ์ •์  ๊ฐ€์ค‘์น˜๋ณด๋‹ค ํฌ๋ฉด dp[๋‹ค์Œ์ •์ ]ํ˜„์žฌ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ํ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ๋ฌธ์ œ๋ฅผ ํ’€๋•Œ๋Š” ..๋‹ค์ต์ŠคํŠธ๋ผ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” ์•„๋ž˜ ๋‚ด์šฉ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ํ’€๋ฉด ๋œ๋‹ค. 1. dp ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’์„ Int.max๋กœ ๋‘๊ธฐ2. ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„์ธ์ง€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ธ์ง€ ํ™•์ธํ•ด์„œ ๋”•์…”๋„ˆ๋ฆฌ ์—…๋ฐ์ดํŠธ3. bfs ์‹œ์ž‘ํ•  ๋•Œ ์‹œ์ž‘๊ฐ’์˜ dp๋Š” 0์ด๋‚˜ ํŠน์ • ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”4. ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์•ˆํ•จ5. ์Šค์œ„ํ”„ํŠธ๋กœ b..
https://school.programmers.co.kr/learn/courses/30/lessons/64065 ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.programmers.co.kr ๋ฌธ์ œ ์ •๋ฆฌ1. ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜ํŠน์ • ํŠœํ”Œ์„ ํ‘œํ˜„ํ•˜๋Š” ์ง‘ํ•ฉ์ด ๋‹ด๊ธด ๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, s๊ฐ€ ํ‘œํ˜„ํ•˜๋Š” ํŠœํ”Œ์„ ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฐ˜ํ™˜๋ฌธ์ž์—ด s๋Š” ์ˆœ์„œ๊ฐ€ ์„ž์—ฌ์žˆ์Œ=> ๊ตฌํ•  ๊ฒƒ: s๊ฐ€ ํ‘œํ˜„ํ•˜๋Š” ํŠœํ”Œ์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜  2. ์ œ์•ฝ์‚ฌํ•ญ5 โ‰ค s์˜ ๊ธธ์ด โ‰ค 1,000,0001 โ‰ค ํŠœํ”Œ์˜ ์›์†Œ ๊ฐ’์˜ ๋ฒ”์œ„ โ‰ค 100,000  3. ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์‹œ๊ฐ„๋ณต์žก๋„ ํ™•์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์‹œ๊ฐ„ ์ œํ•œ ํ‘œ๊ธฐ๋˜์–ด์žˆ์ง€ ์•Š์Œ  4. ํ’€์ด๋ฐฉ๋ฒ•1) {,}..
https://school.programmers.co.kr/learn/courses/30/lessons/134240?language=swift ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.programmers.co.kr ๋ฌธ์ œ ์ •๋ฆฌ1. ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜2๋ช…์˜ ์„ ์ˆ˜๋“ค์ด ๋Œ€ํšŒ์—์„œ ์ฑ…์ƒ ์–‘์ชฝ์—์„œ ๊ฐ€์šด๋ฐ๋ฅผ ํ–ฅํ•ด ์Œ์‹์„ ๋จน๋Š” ๋Œ€๊ฒฐ์„ ํ•จ.์Šน๋ฆฌ ์กฐ๊ฑด: ์ค‘์•™์— ์žˆ๋Š” ๋ฌผ์„ ๋จผ์ € ๋จน๋Š” ์„ ์ˆ˜ํ™˜๊ฒฝ: ๋‘ ์„ ์ˆ˜๊ฐ€ ๋จน๋Š” ์Œ์‹์˜ ์ข…๋ฅ˜์™€ ์–‘์ด ๊ฐ™์•„์•ผ ํ•จ.ํ™˜๊ฒฝ: ๋‘ ์„ ์ˆ˜๊ฐ€ ์Œ์‹์„ ๋จน๋Š” ์ˆœ์„œ๋„ ๊ฐ™์•„์•ผ ํ•จ.ํ™˜๊ฒฝ: ์นผ๋กœ๋ฆฌ๊ฐ€ ๋‚ฎ์€ ์Œ์‹์„ ๋จผ์ € ๋จน์„ ์ˆ˜ ์žˆ๊ฒŒ ๋ฐฐ์น˜.ํ™˜๊ฒฝ: ์ˆ˜์›…์ด๊ฐ€ ์ค€๋น„ํ•ด์˜จ ์Œ์‹ ์ค‘ ๋ช‡๊ฐœ๋Š” ๋Œ€ํšŒ์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•จ.=..
https://www.acmicpc.net/problem/18352 18352๋ฒˆ: ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ N, ๋„๋กœ์˜ ๊ฐœ์ˆ˜ M, ๊ฑฐ๋ฆฌ ์ •๋ณด K, ์ถœ๋ฐœ ๋„์‹œ์˜ ๋ฒˆํ˜ธ X๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (2 โ‰ค N โ‰ค 300,000, 1 โ‰ค M โ‰ค 1,000,000, 1 โ‰ค K โ‰ค 300,000, 1 โ‰ค X โ‰ค N) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ๋‘ ๊ฐœwww.acmicpc.net   ๊ทธ๋ž˜ํ”„, ๋‹ค์ต์ŠคํŠธ๋ผ ์—ฐ์Šต์„ ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋˜ ๋ฌธ์ œ์ด๋‹ค.๊ธฐ์กด์— ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœํšŒํ•  ๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ idx๋กœ ํ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.while let q = queue.isEmpty() ? nil : queue.removeFirst() X๋ถ€ํ„ฐ ํ(์ผ๋ฐ˜ ๋ฐฐ์—ด)์— ๋„ฃ์Œ (๊ฑฐ๋ฆฌ๋ฐฐ์—ดdist๋Š” max๊ฐ’..
์ฒ˜์Œ์— ์ƒ๊ฐํ–ˆ๋˜ ํ’€์ด 1. ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ = "์˜์ƒ์˜ ์ข…๋ฅ˜":["์˜์ƒ์ด๋ฆ„"] 2. ๋ฒ”์œ„ (1...์˜์ƒ์˜ ์ข…๋ฅ˜ ์ˆ˜) dp ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ 3. dp ํ…Œ์ด๋ธ” ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ์ด ์ˆœ์„œ๋Œ€๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ณ  ๊ทœ์น™์„ ์ฐพ์•„ dp ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•˜๋ ค ํ–ˆ์—ˆ๋‹ค.. ๊ทœ์น™์„ ์ฐพ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ, ๊ฐ๋งŒ ์˜ค๊ณ .. ์ƒ๊ฐํ–ˆ๋˜ ๋Œ€๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•„์„œ "ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ์งˆ๋ฌธํ•˜๊ธฐ"๋ฅผ ํ™•์ธํ•ด๋ดค๋Š”๋ฐ ๋ช…์พŒํ•œ ์ˆ˜ํ•™์  ํ’€์ด๊ฐ€ ์žˆ์–ด์„œ ๊ธฐ๋กํ•ด๋‘๊ณ ์ž ํ•œ๋‹ค. ๊ณ ๋“ฑํ•™์ƒ ๋•Œ ์ด ๋ฌธ์ œ๋ฅผ ๋ดค์œผ๋ฉด ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐ๋ฐฉ์‹์„ ์•Œ์•„๋ƒˆ์„ ๋“ฏ ํ•˜๋‹ค,,ใ…Ž.ใ…Ž ํ•ด๊ฒฐ ๋ฐฉ์‹ ์˜์ƒ์˜ ์ข…๋ฅ˜ 1๊ฐ€์ง€ ์ƒ์˜์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’ = ์ƒ์˜ ๊ฐœ์ˆ˜ (์•„๋ž˜๋ถ€ํ„ด ํŽธ์˜์ƒ "๊ฐœ์ˆ˜" ์ƒ๋žต) ์˜์ƒ์˜ ์ข…๋ฅ˜ 2๊ฐ€์ง€ ์ƒ์˜, ํ•˜์˜์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’ = ์ƒ์˜ + ํ•˜์˜ + ์ƒ์˜ * ํ•˜์˜ ์˜์ƒ์˜ ์ข…๋ฅ˜ 3๊ฐ€์ง€ ์ƒ์˜, ํ•˜์˜, ์‹ ๋ฐœ์ผ ๊ฒฝ์šฐ ๋ฐ˜..
์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””ํ•˜๋ฉด์„œ ์žฌ๊ท€์— ๋Œ€ํ•ด ์ž˜ ์ดํ•ดํ•˜๊ณ  ์“ฐ์ง€ ๋ชปํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜๋‚˜ ํŒฉํ† ๋ฆฌ์–ผ ๋ฌธ์ œ ์ •๋„๋Š” ๊ดœ์ฐฎ์€๋ฐ, ์ดํ•ด๋„๊ฐ€ ์กฐ๊ธˆ ๋ถ€์กฑํ–ˆ์–ด์„œ ๊ทธ ์ด์ƒ์€ ์ฒดํ™”๋˜์ง€ ์•Š์•„, ์‰ฝ๊ฒŒ ์žฌ๊ท€๋ฅผ ๋– ์˜ฌ๋ ค ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค. ์ด๋ฒˆ์— ์ฝ”ํ…Œ๋ฅผ ์ค€๋น„ํ•˜๋ฉด์„œ, ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ๋ณด๋‹จ ๋ถ€์กฑํ–ˆ๋˜ ๊ธฐ๋ณธ ๊ฐœ๋…์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž!๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์„ ๋“ค์—ฌ๋‹ค๋ณด์•˜๊ณ , ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์„ ์•Œ์•„๊ฐ€๋ฉด์„œ ์žฌ๊ท€์— ๋Œ€ํ•ด์„œ๋„ ์ž์—ฐ์Šค๋ ˆ ์ฒดํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค-!!! ์ˆœ์—ด (permutation) ์ˆœ์—ด์ด๋ž€ ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ์—์„œ r๊ฐœ๋ฅผ ์ค‘๋ณต ์—†์ด ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.(๋‹จ, 0 ์กฐํ•ฉ func ์กฐํ•ฉ(_ depth: Int, _ start: Int) { if ๋ށ์Šค๊ฐ€ M๊นŒ์ง€ ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด { ๊ฒฐ๊ณผ๋ฐฐ์—ด ์ถœ๋ ฅ } else { ์ธ..
BFS(๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰) 1. removeFirst() ์‚ฌ์šฉ func bfs(graph: [[Int]], startX: Int, startY: Int) -> [Int] { var visited = Array(repeating: Array(repeating: false, count: n), count: n) var queue = [(startX, startY)] var result = [Int]() visited[startX][startY] = true while let node = queue.isEmpty ? nil : queue.removeFirst() { let x = node.0 let y = node.1 result.append(graph[x][y]) let dx = [0, 0, 1, -1] let ..
import Foundation func checkLowerCase(_ input: String) -> Bool { let lowercaseSet = CharacterSet.lowercaseLetters return input.rangeOfCharacter(from: lowercaseSet.inverted) == nil } let st = ["ss", "s1", "11", "SS", "d-"] for s in st { if checkLowerCase(s) { print(s) } } // ss https://developer.apple.com/documentation/foundation/characterset
https://www.acmicpc.net/problem/11659 11659๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4 ์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ i์™€ j www.acmicpc.net ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋ˆ„์ ํ•ฉ์„ ์ฒ˜์Œ ์ ‘ํ–ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ ์ €์žฅํ•ด์„œ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์€ ๋“ค์—ˆ๋Š”๋ฐ, ์ •ํ™•ํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ๋ˆ„์ ‘ํ•ฉ!์ธ์ง€๋Š” ๋ชฐ๋ž๋‹ค..! ๋ˆ„์ ํ•ฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž! ๋ˆ„์ ํ•ฉ ํŠน์ • ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ์ฐพ๋Š”๋ฐ ์œ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ˆ„์ ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—ฐ์†๋œ ์›์†Œ๋“ค์˜ ํ•ฉ์„ ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์‹œํ€€์Šค ๋ฐ์ดํ„ฐ์—์„œ ์ผ๋ถ€ ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ์ฐพ๋Š” ๋ฐ ์‚ฌ..