바탕화면 정리

Sheryl Yun·2023년 7월 11일
0

문제 링크🔗

처음 풀이

  • 반환할 배열 모양(규칙 찾기):
    [ #이 포함된 배열 인덱스 중 MIN 인덱스, #의 인덱스 중 MIN 인덱스, #이 포함된 배열 인덱스 중 MAX 인덱스, #의 인덱스 중 MAX 인덱스 ]
  • 각각을 변수로 선언
  • #이 포함된 배열 인덱스 중 MIN 인덱스 구하기
  • 배열을 돌다가 #을 포함(.includes('#'))하는 문자열이 등장하지 않을 때마다 + 1
  • #을 포함하는 문자열이 등장하는 순간 return
  • #의 인덱스 중 MIN 인덱스 구하기
  • 배열의 각 요소마다 .indexOf('#')으로 문자열에서 #이 처음 등장하는 인덱스 구하기
  • 더 작은 값이 나오면 min 교체
  • MAX의 경우 3, 4번을 MAX로 바꾸어 구현 (배열을 .reverse()로 뒤집은 다음 돌기)
  • 문제점: 입출력 예시는 모두 통과했지만 정확도 테스트는 71% 통과

새로운 풀이

요약: '#'이 있는 좌표 중 최소 x, y 좌표와 최대 x, y 좌표를 찾는다.

  • '#'이 있는 좌표의 x 좌표와 y 좌표를 담을 X, Y 배열을 각각 선언
  • wallpaper에서 '#'이 등장한 x, y 좌표(= i, j 인덱스)를 X 배열과 Y 배열에 각각 담기
  • x, y 좌표의 최소, 최대값이 섞여 있는 X 배열과 Y 배열을 각각 오름차순으로 정렬 (** sort는 원본 배열을 변경하기 때문에 재할당 과정이 필요하지 않음)
  • 정렬된 X, Y 배열을 활용하여 answer 배열을 리턴
    • 형태: [시작 좌표의 x(X 배열의 첫 값), 시작 좌표의 y(Y 배열의 첫 값), 끝 좌표의 x(X 배열의 마지막 값 + 1), 끝 좌표의 y(Y 배열의 마지막 값 + 1)]

마지막 값에 1을 더해주는 이유: 시작 좌표는 '#'이 있는 열과 칸의 값이 동일하지만, 끝 좌표는 칸의 값에 1을 더해야 열이 된다.

function solution(wallpaper) {
    let answer = [];
    let X = [];
    let Y = [];
    
    for (let i = 0; i < wallpaper.length; i++) {
        for (let j = 0; j < wallpaper[i].length; j++) {
            if (wallpaper[i][j] === '#') {
                X.push(i);
                Y.push(j);
            }
        }
    }
    
    X.sort((a, b) => a - b);
    Y.sort((a, b) => a - b);
    
    answer = [X[0], Y[0], X[X.length - 1] + 1, Y[Y.length - 1] + 1]
    
    return answer;
}

** 7월 11일부터 7월 14일까지 채용 과제를 진행하여 4개의 포스팅을 한번에 올립니다.

profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

0개의 댓글