
์ฝ๋ฉํ ์คํธ๋ฅผ ์ค๋นํ๋ ๋จธ์ฑ์ด๋ ํ๋ก๊ทธ๋๋จธ์ค์์ ๋ฌธ์ ๋ฅผ ํ๊ณ ๋์ค์ ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ ค๊ณ ์์ฑํ ์ฝ๋๋ฅผ ์ปดํจํฐ ๋ฐํํ๋ฉด์ ์๋ฌด ์์น์๋ ์ ์ฅํด ๋ก๋๋ค. ์ ์ฅํ ์ฝ๋๊ฐ ๋ง์์ง๋ฉด์ ๋จธ์ฑ์ด๋ ๋ณธ์ธ์ ์ปดํจํฐ ๋ฐํํ๋ฉด์ด ๋๋ฌด ์ง์ ๋ถํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ์ค์์ ์์ฑํ๋ ์ฝ๋๋ ๊ทธ ๋ฌธ์ ์ ๊ฐ์ ๋ค์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฅํด ๋ ํ์ผ๋ค์ ์ ๋ถ ์ญ์ ํ๊ธฐ๋ก ํ์ต๋๋ค.
์ปดํจํฐ ๋ฐํํ๋ฉด์ ๊ฐ ์นธ์ด ์ ์ฌ๊ฐํ์ธ ๊ฒฉ์ํ์
๋๋ค. ์ด๋ ์ปดํจํฐ ๋ฐํํ๋ฉด์ ์ํ๋ฅผ ๋ํ๋ธ ๋ฌธ์์ด ๋ฐฐ์ดย wallpaper๊ฐ ์ฃผ์ด์ง๋๋ค. ํ์ผ๋ค์ ๋ฐํํ๋ฉด์ ๊ฒฉ์์นธ์ ์์นํ๊ณ ๋ฐํํ๋ฉด์ ๊ฒฉ์์ ๋ค์ ๋ฐํํ๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ ์๋ฅผ (0, 0)์ผ๋ก ์์ํด (์ธ๋ก ์ขํ, ๊ฐ๋ก ์ขํ)๋ก ํํํฉ๋๋ค. ๋น์นธ์ ".", ํ์ผ์ด ์๋ ์นธ์ "#"์ ๊ฐ์ ๊ฐ์ง๋๋ค. ๋๋๊ทธ๋ฅผ ํ๋ฉด ํ์ผ๋ค์ ์ ํํ ์ ์๊ณ , ์ ํ๋ ํ์ผ๋ค์ ์ญ์ ํ ์ ์์ต๋๋ค. ๋จธ์ฑ์ด๋ ์ต์ํ์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ ํ ๋ฒ์ ๋๋๊ทธ๋ก ๋ชจ๋ ํ์ผ์ ์ ํํด์ ํ ๋ฒ์ ์ง์ฐ๋ ค๊ณ ํ๋ฉฐ ๋๋๊ทธ๋ก ํ์ผ๋ค์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
lux,ย luy)๋ฅผ ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ผ๋ก ํด๋ฆญํ ์ํ๋ก ๊ฒฉ์์ E(rdx,ย rdy)๋ก ์ด๋ํ ๋ค ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋ผ๋ ํ๋์
๋๋ค. ์ด๋, "์ S์์ ์ E๋ก ๋๋๊ทธํ๋ค"๊ณ ํํํ๊ณ ์ S์ ์ E๋ฅผ ๊ฐ๊ฐ ๋๋๊ทธ์ ์์์ , ๋์ ์ด๋ผ๊ณ ํํํฉ๋๋ค.lux,ย luy)์์ ์ E(rdx,ย rdy)๋ก ๋๋๊ทธ๋ฅผ ํ ๋, "๋๋๊ทธ ํ ๊ฑฐ๋ฆฌ"๋ |rdxย -ย lux| + |rdyย -ย luy|๋ก ์ ์ํฉ๋๋ค.์๋ฅผ ๋ค์ดย wallpaperย = [".#...", "..#..", "...#."]์ธ ๋ฐํํ๋ฉด์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

์ด๋ฌํ ๋ฐํํ๋ฉด์์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด S(0, 1)์์ E(3, 4)๋ก ๋๋๊ทธํ๋ฉด ์ธ ๊ฐ์ ํ์ผ์ด ๋ชจ๋ ์ ํ๋๋ฏ๋ก ๋๋๊ทธ ํ ๊ฑฐ๋ฆฌ (3 - 0) + (4 - 1) = 6์ ์ต์๊ฐ์ผ๋ก ๋ชจ๋ ํ์ผ์ ์ ํ ๊ฐ๋ฅํฉ๋๋ค.
๋จธ์ฑ์ด์ ์ปดํจํฐ ๋ฐํํ๋ฉด์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ดย wallpaper๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ๋ฐํํ๋ฉด์ ํ์ผ๋ค์ ํ ๋ฒ์ ์ญ์ ํ๊ธฐ ์ํด ์ต์ํ์ ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ ๋๋๊ทธ์ ์์์ ๊ณผ ๋์ ์ ๋ด์ ์ ์ ๋ฐฐ์ด์ returnํ๋ย solutionย ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ๋๋๊ทธ์ ์์์ ์ด (lux,ย luy), ๋์ ์ด (rdx,ย rdy)๋ผ๋ฉด ์ ์ ๋ฐฐ์ด [lux,ย luy,ย rdx,ย rdy]๋ฅผ returnํ๋ฉด ๋ฉ๋๋ค.
wallpaper์ ๊ธธ์ด โค 50wallpaper[i]์ ๊ธธ์ด โค 50wallpaper์ ๋ชจ๋ ์์์ ๊ธธ์ด๋ ๋์ผํฉ๋๋ค.wallpaper[i][j]๋ ๋ฐํํ๋ฉด์์ย i + 1ํย j + 1์ด์ ํด๋นํ๋ ์นธ์ ์ํ๋ฅผ ๋ํ๋
๋๋ค.wallpaper[i][j]๋ "#" ๋๋ "."์ ๊ฐ๋ง ๊ฐ์ง๋๋ค.lux,ย luy)์ ๋์ (rdx,ย rdy)๋ย luxย <ย rdx,ย luyย <ย rdy๋ฅผ ๋ง์กฑํด์ผ ํฉ๋๋ค.| wallpaper | return |
|---|---|
| [".#...", "..#..", "...#."] | [0, 1, 3, 4] |
| ["..........", ".....#....", "......##..", "...##.....", "....#....."] | [1, 3, 5, 8] |
์ฐ์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ ์์ฒด๋ ๊ฐ๋จํ์ต๋๋ค.
lux(top) : wallpaper ๋ฐฐ์ด์์ ๊ฐ์ฅ ๋จผ์ โ#โ์ด ๋ค์ด์๋ ์์์ ์์น (๊ฐ์ฅ ์์ ์๋ ํ์ผ ์์น)luy(left) : ๋ฌธ์์ด ์ค ๊ฐ์ฅ ์์ ์๋ โ#โ์ ์์น (๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ํ์ผ ์์น)rdx(bottom) : wallpaper ๋ฐฐ์ด์์ ๊ฐ์ฅ ๋ค์ โ#โ์ด ๋ค์ด์๋ ์์์ ์์น + 1 (๊ฐ์ฅ ๋ฐ์ ์๋ ํ์ผ ์์น)rdy(right) : ๋ฌธ์์ด ์ค ๊ฐ์ฅ ๋ค์ ์๋ โ#โ์ ์์น + 1 (๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ํ์ผ ์์น)๊ฐ ์ ์ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด, ์ฒ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค.
function solution(wallpaper) {
// ๊ฐ ๋ฌธ์์ด์ ์ฒซ '#' ์ธ๋ฑ์ค ๋ฐฐ์ด
const findTopArr = wallpaper.map(row => row.indexOf('#'));
// '#'์ด ์๋ ๊ฒฝ์ฐ๋ -1์ด๋ฏ๋ก -1๋ณด๋ค ํฐ ์ฒซ๋ฒ์งธ ์๋ฅผ ๊ตฌํจ
const top = findTopArr.findIndex(index => index >= 0);
// ์ฒซ ์ธ๋ฑ์ค ๋ฐฐ์ด์์ -1์ ์ ์ธํ๊ณ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ตฌํจ
const findLeftArr = findTopArr.filter(index => index >= 0);
const left = Math.min(...findLeftArr);
// ๊ฐ ๋ฌธ์์ด์ ๋ง์ง๋ง '#' ์ธ๋ฑ์ค ๋ฐฐ์ด์ ๋ค์ง์ ๋ฐฐ์ด
const findBottomArr = wallpaper.map(row => row.lastIndexOf('#')).reverse();
// ์ ์ฒด ๊ธธ์ด์์ '#'์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ฅ ์ฒ์ ๋ฑ์ฅํ๋ ์ธ๋ฑ์ค๋ฅผ ๋นผ์ ๊ตฌํจ
const bottom = wallpaper.length - findBottomArr.findIndex(index => index >= 0);
// ๊ฐ์ฅ ํฐ ๊ฐ์ด ๊ณง ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์์
const right = Math.max(...findBottomArr) + 1;
return [top, left, bottom, right];
}
ํ๋ก์ ํธ์์๋ for ๋ฐ๋ณต๋ฌธ๋ณด๋ค ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๋ณด๋ ์ต์ํ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
ํ์ง๋ง, ๋ฐฐ์ด์ ์ ์ ํ๋ ๋ฉ์๋๊ฐ ์ค๋ณต๋์ด ๋นํจ์จ์ ์ด๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค. ๋, ์ฝ๋ฉ ํ ์คํธ์์๋ ๋ฐ๋ณต๋ฌธ์ด ๋ ๊ฐ๊ฒฐํ๊ณ ๋น ๋ฅธ ๊ฒฝ์ฐ๊ฐ ์์ด ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ฆฌํฉํ ๋งํ์์ต๋๋ค.
function solution(wallpaper) {
// length๋ฅผ ๋ณ์์ ์ ์ฅํด์ ์ฌ์ฉํ๋ฉด, ๋งค๋ฒ ๊ณ์ฐํ์ง ์์๋ ๋ฉ๋๋ค.
const rows = wallpaper.length;
const cols = wallpaper[0].length;
// ์ฐ์ ๊ฐ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด
let top = rows; // ๋ฐฐ์ด์ ์ ์ฒด ๊ธธ์ด
let left = cols; // ๋ฌธ์์ด์ ๊ธธ์ด
let bottom = 0;
let right = 0;
for(let i = 0; i < rows; i++) {
for(let j = 0; j < cols; j++) {
// ๋ฌธ์์ด์ ๋๋ฉด์ '#'์ ๋ง๋๋ฉด
if(wallpaper[i][j] === '#') {
top = Math.min(top, i); // ๊ธฐ์กด์ top ์์น์ ๋น๊ตํด ๊ฐ์ฅ ์์, ์ฆ ๊ฐ์ฅ ์์ ์๋ ์์น๋ฅผ ์ ์ฅ
left = Math.min(left, j); // ๊ธฐ์กด์ left์์น์ ๋น๊ตํด ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์์น๋ฅผ ์ ์ฅ
bottom = Math.max(bottom, i + 1); // ๊ธฐ์กด์ bottom ์์น์ ๋น๊ตํด ๊ฐ์ฅ ์๋์ ์๋ ์์น๋ฅผ ์ ์ฅ
right = Math.max(right, j + 1); // ๊ธฐ์กด์ right ์์น์ ๋น๊ตํด ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์์น๋ฅผ ์ ์ฅ
}
}
}
return [top, left, bottom, right]
}
์ฒซ๋ฒ์งธ ์ ๋ ฅ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.

๊ธฐ์กด์ ๋ ๋ฒ map์ ๋๋ ค์ O(2nm)์ด๋ ์๊ฐ๋ณต์ก๋๋ฅผ O(nm)์ผ๋ก ํ ๋ฒ์ ์ํ๋ก ๊ฐ์ ๋ชจ๋ ๋์ถํ ์ ์์ต๋๋ค. ์ฑ๋ฅ๋ฉด์์ ํฐ ์ฐจ์ด๋ ์๋์ง๋ง, ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ข์์ก์ต๋๋ค.