본문 바로가기
개발이야기/알고리즘

[알고리즘] 바탕화면 정리

by KimHarry 2023. 4. 15.

0. 잡소리

코딩테스트... 꾸준히 하자

오랜만에 했더니 뇌가 굳어버린것 같다. ㅠㅠㅠ

 

1. 조건

문자열 최대 길이 50

배열 최대 길이 50

문자열은 .과 #로만 이루어져있다.

 

바탕화면의 드래그 최단 거리를 구하라

 

2. 과정

2차원 배열로 바꾸기 위해 split()을 활용했다.

2차원 배열을 순회를 하며 "#"이 포함된 좌표 x, y값을 각 배열에 집어 넣었다.

순회가 끝난 뒤 각 배열의 최대 최솟값 (이때 최대값에는 +1을 해준다)을

[lux, luy, rdx, rdy]순으로 return 한다.

 

3. 풀이

function solution(wallpaper) {
  const wallpaperArray = [];
  wallpaper.map((item) => wallpaperArray.push(item.split("")));
  const x = [];
  const y = [];
  const answer = [];

  for (let i = 0; i < wallpaper.length; i += 1) {
    for (let j = 0; j < wallpaper[0].length; j += 1) {
      if (wallpaper[i][j] === "#") {
        x.push(i);
        y.push(j);

        continue;
      }
    }
  }

  const sortedX = x.sort((a, b) => a - b);
  const sortedY = y.sort((a, b) => a - b);

  answer.push(sortedX[0]);
  answer.push(sortedY[0]);
  answer.push(sortedX.pop() + 1);
  answer.push(sortedY.pop() + 1);

  return answer;
}

꼭 정렬을 하지 않아도 될것같아 Math를 활용해보기로 했다.

 

 

4. 개선 된 풀이

function solution(wallpaper) {
  const wallpaperArray = [];
  wallpaper.map((item) => wallpaperArray.push(item.split("")));

  const x = [];
  const y = [];

  for (let i = 0; i < wallpaper.length; i += 1) {
    for (let j = 0; j < wallpaper[0].length; j += 1) {
      if (wallpaper[i][j] === "#") {
        x.push(i);
        y.push(j);

        continue;
      }
    }
  }

  return [
    Math.min(...x),
    Math.min(...y),
    Math.max(...x) + 1,
    Math.max(...y) + 1,
  ];
}

'개발이야기 > 알고리즘' 카테고리의 다른 글

[알고리즘] 폰켓몬 (해시)  (0) 2023.10.27
[알고리즘] 달리기 경주 (해시)  (0) 2023.10.25
[알고리즘] 덧칠하기  (0) 2023.03.29
[알고리즘] 대충 만든 자판  (0) 2023.03.29
[알고리즘] 카드 뭉치  (0) 2023.03.27