[JS] Programmers 161990 바탕화면 정리

서연주·2023년 7월 6일
0

Algorithm

목록 보기
15/25

'바탕화면 정리'

Programmers '바탕화면 정리' 문제 보러가기

풀이 코드

문자열 내에서 탐색하고자 하는 문자의 위치를 알 수 있는 indexOf()lastIndexOf()를 사용하여 값을 찾았다.

function solution(wallpaper) {
    var answer = [];
    const INF = 55;
    var lux = INF, luy = INF, rux = 0, ruy=0; 
    // lux = 가장 작은 나온 #의 x좌표
    // luy = 가장 작게 나온 #의 y좌표
    // rux = 가장 큰 나온 #의 x좌표 
    // ruy = 가장 크게 나온 #의 y좌표
    
    wallpaper.map((row,i)=>{
        tempX = row.indexOf('#');
        if(tempX !== -1){
            lux = Math.min(lux, tempX);
            luy = Math.min(luy, i);
        }
        tempX = row.lastIndexOf('#');
        if(tempX !== -1){
            rux = Math.max(rux, tempX);
            ruy = Math.max(ruy, i);
        }
    }) 
    return [luy, lux, ruy+1, rux+1];
}
  • String.prototpye.indexOf()
    ; 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환한다. 일치하는 값이 없으면 -1을 반환한다.
    - str.indexOf(searchValue[, fromIndex])
    - searchValue로 아무 값도 주어지지 않으면 문자열 "undefined"를 찾으려는 문자열로 사용한다
    - 대소문자를 구분한다
    - Array에 관해서도 동일한 메서드가 존재한다
    - 역순으로 탐색하는 메서드는 String.prototpye.lastIndexof()

또다른 풀이 방법

*Taemin Jang 님의 풀이를 참고하였습니다.
가능한 모든 좌표를 모아 그 안에서 최대, 최소값을 구한다

function solution(wallpaper) {
    var left = [];
    var top = [];
    var right = []
    var bottom = [];
    wallpaper.forEach((row,i) => {
        [...row].forEach((file,idx) => {
            // 정답이 될 수 있는 모든 index값 저장
            if(file === "#") {
                left.push(i)
                top.push(idx)
                right.push(i + 1)
                bottom.push(idx + 1)
            }
        })
    })
    return [Math.min(...left), Math.min(...top), Math.max(...right), Math.max(...bottom)]
}
  • 자바스크립트에서는 스프레드 연산자...를 이용하여 문자열을 배열로 변환할 수 있다.

참고 자료

profile
pizz@ttang

0개의 댓글