[ ๐—ฝ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ฒ๐—ฟ๐˜€ ] ๋ฐ”ํƒ•ํ™”๋ฉด ์ •๋ฆฌ - ์‹œ๋ฎฌ๋ ˆ์ด์…˜ | JavaScript

NewHaยท2025๋…„ 5์›” 2์ผ
0
post-thumbnail

๐ŸŽฏ ๋ฌธ์ œ ์„ค๋ช…

๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.1 - ๋ฐ”ํƒ•ํ™”๋ฉด ์ •๋ฆฌ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋จธ์“ฑ์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚˜์ค‘์— ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ ๋ฐ”ํƒ•ํ™”๋ฉด์— ์•„๋ฌด ์œ„์น˜์—๋‚˜ ์ €์žฅํ•ด ๋‘ก๋‹ˆ๋‹ค. ์ €์žฅํ•œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด์„œ ๋จธ์“ฑ์ด๋Š” ๋ณธ์ธ์˜ ์ปดํ“จํ„ฐ ๋ฐ”ํƒ•ํ™”๋ฉด์ด ๋„ˆ๋ฌด ์ง€์ €๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ๋Š” ๊ทธ ๋ฌธ์ œ์— ๊ฐ€์„œ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅํ•ด ๋‘” ํŒŒ์ผ๋“ค์„ ์ „๋ถ€ ์‚ญ์ œํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ ๋ฐ”ํƒ•ํ™”๋ฉด์€ ๊ฐ ์นธ์ด ์ •์‚ฌ๊ฐํ˜•์ธ ๊ฒฉ์žํŒ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์ปดํ“จํ„ฐ ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๋ฌธ์ž์—ด ๋ฐฐ์—ดย wallpaper๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ํŒŒ์ผ๋“ค์€ ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ๊ฒฉ์ž์นธ์— ์œ„์น˜ํ•˜๊ณ  ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ๊ฒฉ์ž์ ๋“ค์€ ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„๋ฅผ (0, 0)์œผ๋กœ ์‹œ์ž‘ํ•ด (์„ธ๋กœ ์ขŒํ‘œ, ๊ฐ€๋กœ ์ขŒํ‘œ)๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋นˆ์นธ์€ ".", ํŒŒ์ผ์ด ์žˆ๋Š” ์นธ์€ "#"์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋“œ๋ž˜๊ทธ๋ฅผ ํ•˜๋ฉด ํŒŒ์ผ๋“ค์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ณ , ์„ ํƒ๋œ ํŒŒ์ผ๋“ค์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จธ์“ฑ์ด๋Š” ์ตœ์†Œํ•œ์˜ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ํ•œ ๋ฒˆ์˜ ๋“œ๋ž˜๊ทธ๋กœ ๋ชจ๋“  ํŒŒ์ผ์„ ์„ ํƒํ•ด์„œ ํ•œ ๋ฒˆ์— ์ง€์šฐ๋ ค๊ณ  ํ•˜๋ฉฐ ๋“œ๋ž˜๊ทธ๋กœ ํŒŒ์ผ๋“ค์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋“œ๋ž˜๊ทธ๋Š” ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ๊ฒฉ์ž์  S(lux,ย luy)๋ฅผ ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์œผ๋กœ ํด๋ฆญํ•œ ์ƒํƒœ๋กœ ๊ฒฉ์ž์  E(rdx,ย rdy)๋กœ ์ด๋™ํ•œ ๋’ค ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋–ผ๋Š” ํ–‰๋™์ž…๋‹ˆ๋‹ค. ์ด๋•Œ, "์  S์—์„œ ์  E๋กœ ๋“œ๋ž˜๊ทธํ•œ๋‹ค"๊ณ  ํ‘œํ˜„ํ•˜๊ณ  ์  S์™€ ์  E๋ฅผ ๊ฐ๊ฐ ๋“œ๋ž˜๊ทธ์˜ ์‹œ์ž‘์ , ๋์ ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ์  S(lux,ย luy)์—์„œ ์  E(rdx,ย rdy)๋กœ ๋“œ๋ž˜๊ทธ๋ฅผ ํ•  ๋•Œ, "๋“œ๋ž˜๊ทธ ํ•œ ๊ฑฐ๋ฆฌ"๋Š” |rdxย -ย lux| + |rdyย -ย luy|๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์  S์—์„œ ์  E๋กœ ๋“œ๋ž˜๊ทธ๋ฅผ ํ•˜๋ฉด ๋ฐ”ํƒ•ํ™”๋ฉด์—์„œ ๋‘ ๊ฒฉ์ž์ ์„ ๊ฐ๊ฐ ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ ํ•˜๋Š” ์ง์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์ด ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ดย wallpaperย = [".#...", "..#..", "...#."]์ธ ๋ฐ”ํƒ•ํ™”๋ฉด์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐ”ํƒ•ํ™”๋ฉด์—์„œ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด S(0, 1)์—์„œ E(3, 4)๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ์„ธ ๊ฐœ์˜ ํŒŒ์ผ์ด ๋ชจ๋‘ ์„ ํƒ๋˜๋ฏ€๋กœ ๋“œ๋ž˜๊ทธ ํ•œ ๊ฑฐ๋ฆฌ (3 - 0) + (4 - 1) = 6์„ ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ๋ชจ๋“  ํŒŒ์ผ์„ ์„ ํƒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋จธ์“ฑ์ด์˜ ์ปดํ“จํ„ฐ ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ดย wallpaper๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ํŒŒ์ผ๋“ค์„ ํ•œ ๋ฒˆ์— ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๋“œ๋ž˜๊ทธ์˜ ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ๋‹ด์€ ์ •์ˆ˜ ๋ฐฐ์—ด์„ returnํ•˜๋Š”ย solutionย ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. ๋“œ๋ž˜๊ทธ์˜ ์‹œ์ž‘์ ์ด (lux,ย luy), ๋์ ์ด (rdx,ย rdy)๋ผ๋ฉด ์ •์ˆ˜ ๋ฐฐ์—ด [lux,ย luy,ย rdx,ย rdy]๋ฅผ returnํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿฅ… ์ œํ•œ ์‚ฌํ•ญ

  • 1 โ‰คย wallpaper์˜ ๊ธธ์ด โ‰ค 50
  • 1 โ‰คย wallpaper[i]์˜ ๊ธธ์ด โ‰ค 50
    • wallpaper์˜ ๋ชจ๋“  ์›์†Œ์˜ ๊ธธ์ด๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • wallpaper[i][j]๋Š” ๋ฐ”ํƒ•ํ™”๋ฉด์—์„œย i + 1ํ–‰ย j + 1์—ด์— ํ•ด๋‹นํ•˜๋Š” ์นธ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • wallpaper[i][j]๋Š” "#" ๋˜๋Š” "."์˜ ๊ฐ’๋งŒ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ๋ฐ”ํƒ•ํ™”๋ฉด์—๋Š” ์ ์–ด๋„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋“œ๋ž˜๊ทธ ์‹œ์ž‘์  (lux,ย luy)์™€ ๋์  (rdx,ย rdy)๋Š”ย luxย <ย rdx,ย luyย <ย rdy๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ์ž…์ถœ๋ ฅ ์˜ˆ

wallpaperreturn
[".#...", "..#..", "...#."][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)์œผ๋กœ ํ•œ ๋ฒˆ์˜ ์ˆœํšŒ๋กœ ๊ฐ’์„ ๋ชจ๋‘ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ๋ฉด์—์„œ ํฐ ์ฐจ์ด๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์กŒ์Šต๋‹ˆ๋‹ค.

profile
๋ฐฑ ๋ฒˆ์„ ๋ณด๋ฉด ํ•œ ๊ฐ€์ง€๋Š” ์•ˆ๋‹ค ๐Ÿ‘€

0๊ฐœ์˜ ๋Œ“๊ธ€