๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

Do it ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ•˜๋ฃจ์ฝ”๋”ฉ 5์žฅ ํƒ์ƒ‰ ๋ฌธ์ œ

by ๋น„์†Œ์•ผ 2022. 11. 20.
728x90

 

 

 

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.

 

# 13 ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ 

์—ฐ๊ฒฐ์š”์†Œ๋Š” ์—์ง€๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ

 

ex) 1, 2, 5์™€ 3, 4, 6 ์ด 2๊ฐœ

 

DFS๋Š” ๊ทธ๋ž˜ํ”„ ์™„์ „ ํƒ์ƒ‰์ด๋ฏ€๋กœ, ํ•œ๋ฒˆ์˜ DFS๊ฐ€ ๋๋‚  ๋•Œ ๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ์ด ์—ฐ๊ฒฐ์š”์†Œ 1๊ฐœ์ด๋‹ค.

์ฆ‰ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•  ๋™์•ˆ DFS ํšŸ์ˆ˜๊ฐ€ ์—ฐ๊ฒฐ์š”์†Œ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

๋งŒ์•ฝ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์—ˆ๋‹ค๋ฉด DFS ํšŸ์ˆ˜๋Š” 1์ด๋‹ค.

 

๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„์ด๋ฏ€๋กœ ์–‘๋ฐฉํ–ฅ ๋ชจ๋‘ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„

 

N=1,000์ด๋ฏ€๋กœ O(n^2)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

if(๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด) { // ๊ฐ ์—ฐ๊ฒฐ์š”์†Œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€

count++;

DFS(i);

}

 

DFS(int i) {

if(visited[i] == true) { // ์—ฐ๊ฒฐ์š”์†Œ ๋‚ด๋ถ€์˜ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€

return; // DFS() ํ˜„์žฌ ๋…ธ๋“œ ํƒ์ƒ‰ ์ข…๋ฃŒ

}

}

 

#14 ๋ฏธ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ

์„œ๋กœ ์ธ์ ‘ํ•œ ์นธ๋งŒ ์ด๋™ // ์ฆ‰, ์ƒํ•˜์ขŒ์šฐ 4๋ฐฉํ–ฅ๋งŒ ์ด๋™๊ฐ€๋Šฅ

dx, dy // ์ƒํ•˜์ขŒ์šฐ ์ด๋™ ๋ฐฉํ–ฅ ํ‘œํ˜„ ๋ฐฐ์—ด

ex) 0 1 ์ด๋ฉด ์•„๋ž˜๋กœ ์ด๋™

 

(1, 1) ์—์„œ ์ถœ๋ฐœ // ์ธ๋ฑ์Šค ์ฃผ์˜

 

N=100์ด๋ฏ€๋กœ O(n^2)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ตœ๋‹จ๊ฒฝ๋กœ ์ฐพ๊ธฐ ์ด๋ฏ€๋กœ DFS๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, BFS๊ฐ€ ๋” ์ ์ ˆํ•˜๋‹ค. // ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋‹ฌ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ

 

1๋Œ€์‹  ํšŸ์ˆ˜ ๊ธฐ๋กํ•˜๋ฉด (1,1)์—์„œ ์ž๊ธฐ์ž์‹ ์— ๋„๋‹ฌํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ // ํ™œ์šฉ๊ฐ€๋Šฅ

 

 Queue ๋Š” LinkedList๋กœ ๊ตฌํ˜„

 

BFS(0,0) // ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰ ์‹คํ–‰

 

for(์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰) {

 if(์œ ํšจํ•œ ์ขŒํ‘œ) {

  if(0์ด ์•„๋‹ˆ๋ฉด์„œ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œX) {

  }

 }

}

 

๊ณต๋ฐฑ ์—†๋Š” ๋ฌธ์ž์—ด ๋ถ„๋ฆฌ substring(j, j+1);

 

#15 ์›ํ•˜๋Š” ์ •์ˆ˜ ์ฐพ๊ธฐ

N๊ฐœ์˜ ์ •์ˆ˜ ์•ˆ์— X๋ผ๋Š” ์ •์ˆ˜๊ฐ€ ์กด์žฌ ์—ฌ๋ถ€

 

N = 10,000 // ๋ฐ์ดํ„ฐ ์…‹์˜ ํฌ๊ธฐ(๊ฐœ์ˆ˜)

M = 10,000 // ์งˆ์˜์˜ ๊ฐœ์ˆ˜

์ด๋ฏ€๋กœ N^2์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋” ์ค„์—ฌ์•ผํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด์ง„ํƒ์ƒ‰ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ NlogN ๋จผ์ € ํ›„, ํƒ์ƒ‰ logN์„ ์งˆ์˜ M๋ฒˆ ์ˆ˜ํ–‰

 

Arrays.sort(A);// ๋ฐฐ์—ด A๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ, ์‹œ๊ฐ„๋ณต์žก๋„ O(nlogn)

 

while(์‹œ์ž‘ ์ธ๋ฐ์Šค<=์ข…๋ฃŒ ์ธ๋ฑ์Šค) // ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ๋ถ€๋ถ„์ด ์—†์„ ๋•Œ ๊นŒ์ง€, ์ฆ‰ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ• ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 if(์ค‘์•™๊ฐ’ > ๋ฐ์ดํ„ฐ) { // ์™ผ์ชฝ ์„ ํƒ

 ์ข…๋ฃŒ์ธ๋ฑ์Šค = ์ค‘์•™์ธ๋ฑ์Šค - 1

}

else if(์ค‘์•™๊ฐ’< ๋ฐ์ดํ„ฐ) { // ์˜ค๋ฅธ์ชฝ ์„ ํƒ

 ์‹œ์ž‘์ธ๋ฑ์Šค = ์ค‘์•™์ธ๋ฑ์Šค + 1

}

else { // ์ค‘์•™๊ฐ’ == ๋ฐ์ดํ„ฐ, ์ฆ‰ ์ฐพ์•˜์œผ๋ฏ€๋กœ

find = true;

break; // ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ

}

728x90