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 |