๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

์„œ๋กœ์†Œ ์ง‘ํ•ฉ ์ž๋ฃŒ๊ตฌ์กฐ (Union Find) (๋ฐฑ์ค€ 1043๋ฒˆ)

๋”๋ณด๊ธฐ [Gold IV] ๊ฑฐ์ง“๋ง - 1043 ๋ฌธ์ œ ๋งํฌ ์„ฑ๋Šฅ ์š”์•ฝ ๋ฉ”๋ชจ๋ฆฌ: 14352 KB, ์‹œ๊ฐ„: 128 ms ๋ถ„๋ฅ˜ ์ž๋ฃŒ ๊ตฌ์กฐ, ๋ถ„๋ฆฌ ์ง‘ํ•ฉ, ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์ œ์ถœ ์ผ์ž 2024๋…„ 1์›” 3์ผ 16:32:22 ๋ฌธ์ œ ์„ค๋ช… ์ง€๋ฏผ์ด๋Š” ํŒŒํ‹ฐ์— ๊ฐ€์„œ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ํŒŒํ‹ฐ์— ๊ฐˆ ๋•Œ๋งˆ๋‹ค, ์ง€๋ฏผ์ด๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ๋‹ค. ์ง€๋ฏผ์ด๋Š” ๊ทธ ์ด์•ผ๊ธฐ๋ฅผ ๋งํ•  ๋•Œ, ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ง„์‹ค๋กœ ๋งํ•˜๊ฑฐ๋‚˜ ์—„์ฒญ๋‚˜๊ฒŒ ๊ณผ์žฅํ•ด์„œ ๋งํ•œ๋‹ค. ๋‹น์—ฐํžˆ ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์žฌ๋ฏธ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋˜๋„๋ก์ด๋ฉด ๊ณผ์žฅํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ง€๋ฏผ์ด๋Š” ๊ฑฐ์ง“๋ง์Ÿ์ด๋กœ ์•Œ๋ ค์ง€๊ธฐ๋Š” ์‹ซ์–ดํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ์ด์•ผ๊ธฐ์˜ ์ง„์‹ค์„ ์•ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์‚ฌ๋žŒ๋“ค์ด ํŒŒํ‹ฐ์— ์™”์„ ๋•Œ๋Š”, ์ง€๋ฏผ์ด๋Š” ์ง„์‹ค์„ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

๋‹ค์ต์ŠคํŠธ๋ผ (boj 12851 ์ˆจ๋ฐ”๊ผญ์งˆ2)

๋ฌธ์ œ : https://www.acmicpc.net/problem/12851 12851๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 2 ์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ ๋•Œ www.acmicpc.net ๊ธฐ์กด์˜ ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์—์„œ ์ตœ๋‹จ๊ฒฝ๋กœ์˜ ๊ฐฏ์ˆ˜๊นŒ์ง€ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. 1. ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ณ„์† ํƒ์ƒ‰์„ ์ด์–ด๋‚˜๊ฐ€๋„๋ก ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค. while(!pq.isEmpty()){ Node cur = pq.poll(); if(cur.idx==K && cur.w==dist[K]){ // ๋ชฉํ‘œ์ง€์ ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ count+=1; } ... } ..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ (๋ฐฑ์ค€ 5639๋ฒˆ)

์ „์œ„์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ํ›„์œ„์ˆœํšŒ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ํ’€์ด ์ˆœ์„œ 1. ์ž…๋ ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑ. (๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉ) 2. ๋…ธ๋“œ ํด๋ž˜์Šค ๋‚ด๋ถ€์— insert ํ•จ์ˆ˜ ์ž‘์„ฑ. insert ํ•จ์ˆ˜ : ์ž…๋ ฅ๋œ ๋…ธ๋“œ์˜ ๊ฐ’์„ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ, ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์— ๋‹ฌ์•„์ฃผ๋Š” ํ•จ์ˆ˜. ์ด๋•Œ insert ํ•จ์ˆ˜์— ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ์œ„์น˜๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ํ•ด๋‹น ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ๋‹ฌ์•„์ฃผ๊ณ , ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š” ๋…ธ๋“œ์˜ insertํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœ ์ฝ”๋“œ package com.mincheolsong; import java.io.*; import java.util.*; public class Main { // BOJ 5639๋ฒˆ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ static class Node{ int num; N..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

๋‹ค์ต์ŠคํŠธ๋ผ (๋ฐฑ์ค€ 13549 ์ˆจ๋ฐ”๊ผญ์งˆ 3)

๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ƒํ™ฉ ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ํ•œ ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ชจ๋“  ์ง€์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ํ•œ ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋ฐ”๊พธ๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ์œ„์น˜ X์—์„œ -1, +1, *2 ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ ์œ„์น˜ X๋ฅผ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์„ ๋•Œ X-1, X+1, X*2 ๋ฅผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ, ๊ฐ€์ค‘์น˜๋Š” ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ (1, 1, 0) ์œผ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์šฐ์„ ์ˆœ์œ„ํ ํ™œ์šฉ) ์ฝ”๋“œ package com.mincheolsong; import java.io.*; import java.util.*; public class Main { // boj 13549 ..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ (๋ฐฑ์ค€ 1167๋ฒˆ)

ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด๋ž€ ํŠธ๋ฆฌ์—์„œ ์ž„์˜์˜ ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์ด๋‹ค. ๊ฒฐ๋ก  ์ž„์˜์˜ ์ •์ ์—์„œ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ธด ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. (dfs ํ•œ ๋ฒˆ) ์ฐพ์•„์ง„ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ธด ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. (dfsํ•œ ๋ฒˆ) (์ด dfs ๋‘ ๋ฒˆ์— ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค) ์„ค๋ช… ์œ„ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ 1 - 3 - 4 - 5 ๊ฐ€ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„(ํŠธ๋ฆฌ์—์„œ ์ž„์˜์˜ ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ) ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์ด ๋˜๋Š” ์–‘ ๋ ๋…ธ๋“œ๋Š” 1๊ณผ 5์ด๋‹ค. ์ด ๋•Œ ์ž„์˜์˜ ์ •์ ์—์„œ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ธด ๋…ธ๋“œ๋Š” 1 ํ˜น์€ 5๋ฅผ ๋ฐ˜๋“œ์‹œ ์ง€๋‚˜๊ฒŒ ๋œ๋‹ค. 1์—์„œ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ : 1 - 3 - 4 - 5 2์—์„œ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ : 2 - 4 - 5 3์—์„œ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ : 3 - 4 - 5 4์—์„œ ๊ฑฐ..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ๊ณ„์‚ฐํ•จ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹จ๊ณ„๋ณ„๋กœ ๊ฑฐ์ณ ๊ฐ€๋Š” ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ ๋‹ค์ต์ŠคํŠธ๋ผ์™€ ๋‹ค๋ฅด๊ฒŒ ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์— ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ. 2์ฐจ์› ํ…Œ์ด๋ธ”์— ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์ •๋ณด๋ฅผ ์ €์žฅ DP ์œ ํ˜•์— ์†ํ•จ (์ ํ™”์‹์— ๋งž๊ฒŒ 3์ค‘ FOR๋ฌธ์„ ์ด์šฉํ•ด์„œ 2์ฐจ์› ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ) ๋…ธ๋“œ์˜ ๊ณ„์ˆ˜๊ฐ€ ๋ฐ€์ง‘๊ทธ๋ž˜ํ”„(์™„์ „๊ทธ๋ž˜ํ”„์— ๊ฐ€๊นŒ์šด ๊ทธ๋ž˜ํ”„)์ธ ๊ฒฝ์šฐ ํ”Œ๋กœ์ด๋“œ ์›Œ์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํšจ์œจ์ ์ด๋‹ค. ๋ฐ€์ง‘๊ทธ๋ž˜ํ”„๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ n๋ฒˆ ๋Œ๋ฆฌ๋Š”๊ฒŒ ๋น ๋ฅด๋‹ค O(n^3)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ(์ธ์ ‘ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ)์˜ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๋™์ผํ•˜๋‹ค N์ด 100์ด๋ฉด → 100๋งŒ์ด์–ด์„œ ๊ฐ€๋Šฅ, 500์ด์–ด๋„ → 1์–ต 2์ฒœ 500๋งŒ ์ด์–ด์„œ tryํ•ด๋ณผ ..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

๋ฐฑ์ค€ 9465 ์Šคํ‹ฐ์ปค

dp๋กœ ํ‘ธ๋Š” ๋ฌธ์ œ. ์•Œ๊ฒŒ๋œ ์  ์ ํ™”์‹์„ ์„ธ์šธ ๋•Œ arr[r][c]๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ์™€ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋งŒ ์ƒ๊ฐํ•˜์ง€ ๋ง์ž ์ด๋ฒˆ ๋ฌธ์ œ๋Š” arr[r][c]๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ์ด์ „ ์œ„์น˜๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ–ˆ๋‹ค! dp๋Š” ์ตœ์ ํ•ด์˜ ๋ถ€๋ถ„์ตœ์ ํ•ด๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ์ ํ™”์‹์„ ์„ธ์›Œ์•ผ ํ•œ๋‹ค. ์ฒ˜์Œ ์ ‘๊ทผ๋ฐฉ์‹ arr[r][c] ์˜ ์Šคํ‹ฐ์ปค๋ฅผ ๋–ผ๋Š” ๊ฒฝ์šฐ์™€ ๋–ผ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ ํ™”์‹์„ ์„ธ์šฐ๋ ค๊ณ  ํ–ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ๋ฐฉ์‹ arr[r][c]์˜ ์Šคํ‹ฐ์ปค๋ฅผ ๋—„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ๊ณ ๋ คํ•˜๊ณ , arr[r][c] ์Šคํ‹ฐ์ปค๋ฅผ ๋—„ ์ˆ˜ ์žˆ๋Š” ์ด์ „ ์œ„์น˜ (arr[1][c-1] or arr[1][c-2] ํ˜น์€ arr[0][c-1] or arr[0][c-2]) ๋ฅผ ๋ถ€๋ถ„์ตœ์ ํ•ด๋กœ ๋ณด๋Š” ๊ฒƒ ์ด์—ˆ๋‹ค. ์ ํ™”์‹ r=0์ธ ๊ฒฝ์šฐ dp[r][c] = max{dp[1][c-1], dp[1][c..

๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm

bfs ๋ฐฉ๋ฌธ์ฒดํฌ ์œ„์น˜

๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ๋งŒ๋‚จ.. ๋ถ„๋ช… ๋‹ค๋ฅธ์‚ฌ๋žŒ ์ฝ”๋“œ์™€ ๊ฐ™์€๋ฐ, ์™œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š”์ง€ ์ด์ƒํ–ˆ๋‹ค. ์ด์œ ๋Š” bfs ๋ฐฉ๋ฌธ์ฒดํฌ ์œ„์น˜๋ฅผ ์ž˜ ๋ชป ํ•ด์„œ ๊ฒฐ๋ก  : ํ์— ์‚ฝ์ž…ํ•˜๋Š” ์ˆœ๊ฐ„์— ๋ฐฉ๋ฌธ์ฒดํ‚น์„ ํ•ด์„œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜์ž ์ž˜๋ชป๋œ ๋ฐฉ๋ฌธ์ฒดํฌ ์œ„์น˜ (ํ๋ฅผ ๋ฝ‘๋Š” ์ˆœ๊ฐ„ ๋ฐฉ๋ฌธ์ฒดํฌ) ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ์— ์‚ฌ์šฉ๋œ bfsํ•จ์ˆ˜ ์ผ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค static boolean move(){ Queue tmp = new LinkedList(); while(!bq.isEmpty()){ int[] c = bq.poll(); int cr = c[0], cc=c[1]; if(cr==er && cc == ec){ return true; } chk[c[0]][c[1]]=true; // ๋ฐฉ๋ฌธ์ฒดํฌ for(int d=0;d

mc.thd
'๐Ÿฅ‡์ฝ”๋”ฉํ…Œ์ŠคํŠธ:Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)