거리두기 확인하기 (81302 / 프로그래머스 / JavaScript)

2021. 12. 2. 18:24·알고리즘 문제풀이
반응형

문제

  • [문제링크][https://programmers.co.kr/learn/courses/30/lessons/81302]

풀이과정

처음에는 배열에 있는 문자열을 다시 배열로 나누고, 해당 배열의 요소가 'P' 일 경우를 찾고, 주변에 'P' 가 없고 주변 요소가 'O' 일 경우 다시 주변을 찾는 방법을 생각했는데 코드가 너무 지저분해졌다.

모든 요소를 한번 더 확인해야하는 번거로움이 있다고 생각하여서 풀이 방법을 바꾸었다.

배열요소들을 검사할 때 거리두기가 실패하는 방법만 생각해서 풀었다.

-실패하는 방법 1

해당 요소가 P 인데 상하좌우 중 P가 있을 경우 실패하게 된다.

-실패하는 방법 2

해당요소가 O 인데 상하좌우중에 P가 2개 이상 있을 경우 실패하게 된다.

풀이코드

function solution(places) {
    // P 사람 O 빈자리 X 파티션
    let answer = [];
    for (const x of places) {
        answer.push(check(x));
    }
    return answer;
}

function check(arr){
    let arr1 = arr.map((e) => e.split(''));
    let x = [1,0,-1,0];
    let y = [0,-1,0,1];

    for (let i = 0; i < 5; i++) {
        for (let j = 0; j < 5; j++) {
            // P일 경우
            if(arr1[i][j] ==='P'){
                for (let k = 0; k < 4; k++) {
                    if( i+x[k] >= 0 && j+y[k] >=0 && i+x[k] < 5 && j+ y[k]<5 && arr1[i+x[k]][j+y[k]] === "P"){
                        // 주변이 P라면 => 0 바로 반환
                        return 0;
                    }
                }
            }
            // O 일경우
            if(arr1[i][j] ==='O'){
                let count = 0;
                // 주변에 P가 2개 이상이면 바로 0 반환
                for (let k = 0; k < 4; k++) {
                    if( i+x[k] >= 0 && j+y[k] >=0 && i+x[k] < 5 && j+ y[k]<5 && arr1[i+x[k]][j+y[k]] === "P"){
                        count++;
                    }
                    if(count > 1){
                        return 0;
                    }
                }
            }
        }

    }
    return 1;
}

후기

나름 깔끔하게 풀었다고 생각했는데 생각보다 지저분해서 코드 더 깔끔이 쓰는법을 연구해야겠다.

반응형

'알고리즘 문제풀이' 카테고리의 다른 글

[SWEA][D1] 1933. 간단한 N 의 약수 JAVA  (0) 2025.05.27
[SWEA][D1] 2043. 서랍의 비밀번호 Java  (0) 2025.05.27
오픈채팅방 (42888 / 프로그래머스 / JavaScript)  (1) 2021.12.21
모음사전 ( 84512 /프로그래머스 / JavaScript)  (0) 2021.12.12
124나라의 숫자 ( 12899 / 프로그래머스 / JavaScript)  (1) 2021.12.03
'알고리즘 문제풀이' 카테고리의 다른 글
  • [SWEA][D1] 2043. 서랍의 비밀번호 Java
  • 오픈채팅방 (42888 / 프로그래머스 / JavaScript)
  • 모음사전 ( 84512 /프로그래머스 / JavaScript)
  • 124나라의 숫자 ( 12899 / 프로그래머스 / JavaScript)
WHITE_FROST
WHITE_FROST
개발공부리뷰블로그
    반응형
  • WHITE_FROST
    하얀하얀IT
    WHITE_FROST
  • 전체
    오늘
    어제
    • 분류 전체보기 (119)
      • Stack (43)
        • Next.js (7)
        • React (12)
        • React-Native (15)
        • TypeScript (0)
        • Python (2)
        • JavaScript (2)
        • Android (1)
        • DB (2)
        • JAVA (1)
      • Obsidian (1)
      • AI (3)
      • AI Tools (0)
      • Tools (0)
      • Mac (0)
      • Error (7)
      • 알고리즘 정리 (6)
      • 알고리즘 문제풀이 (46)
      • 공부일상 (4)
      • 개발 도구 & 라이브러리 (0)
      • 정보처리기사 (0)
      • 기타 (6)
      • Tip (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javascript
    코테준비
    Python
    mongoDB Atlas
    ReactHook
    알고리즘
    d1
    boj
    오블완
    코테
    react
    D2
    프로그래머스
    티스토리챌린지
    백준
    hooks
    ios
    React-Native cli
    SWEA
    java
    mongodb cloud
    코딩테스트
    Expo
    error
    react-native
    react-native-maps
    reactnative
    리액트네이티브
    Next.js
    React Hooks
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
WHITE_FROST
거리두기 확인하기 (81302 / 프로그래머스 / JavaScript)
상단으로

티스토리툴바