본문 바로가기
자바스크립트 코딩테스트

프로그래머스 Level 1 - 바탕화면 정리 (Javascript)

by 준벨롭 2023. 11. 22.

문제

답안

function solution(wallpaper) {
    // 답안에 들어갈 좌표계 생성
    var answer = [0,0,0,0];
    let arr = [];
    
    // wallpaper에서 '#'이 포함된 가장 마지막 값의 위치를 찾아 +1한 후 answer[2]에 넣어준다.
    // +1 해주는 이유는 드래그를 해서 포함시켜야 하기 때문임
    for(let i = 0; i < wallpaper.length; i++){
        if(wallpaper[i].includes('#')){
            answer[2] = i+1;
            continue;
        }
    }
    
    // wallpaper에서 '#'이 포함된 가장 첫번째 값의 위치를 answer[0]에 넣어준다.
    for(let i = 0; i < wallpaper.length; i++){
        if(wallpaper[i].includes('#')){
            answer[0] = i;
            break;
        }
    }
    
    // wallpaper의 값 내부에서 '#'의 위치를 찾아 모두 arr에 넣어준다.
    for(let i = 0; i < wallpaper.length; i++){
        for(let j = 0; j < wallpaper[i].length; j++){
            if(wallpaper[i][j] == '#'){
                arr.push(j);
                
            }
        }
    }
    
    // arr의 값을 오름차순으로 정렬한다.
    arr.sort((a,b)=>a-b);
    
    
    // arr에서 가장 작은 값을 answer[1]에, 가장 큰값에 1을 더해 answer[3]에 넣어준다.
    answer[1] = arr[0];
    answer[3] = arr[arr.length-1]+1;
    
    
    return answer;
}

배우고 싶은 답안

function solution(wallpaper) {
    let left = [];
    let top = [];
    let right = []
    let bottom = [];
    wallpaper.forEach((v,i) => {
        [...v].forEach((val,ind) => {
            if(val === "#") {
                left.push(i)
                top.push(ind)
                right.push(i + 1)
                bottom.push(ind + 1)
            }
        })
    })
    return [Math.min(...left), Math.min(...top), Math.max(...right), Math.max(...bottom)]
}

후기

x,y 좌표가 반대라 조금 헷갈린 문제였다.

forEach에 대해 익숙해지고 싶은데, 배열 내부값을 하나씩 확인한다는것이 정확하게 무슨 뜻인지 잘 모르겠다.

싸피 합격하면 강의 사서 들어야겠다.....

728x90