반응형
문제
풀이과정
처음에는 배열에 있는 문자열을 다시 배열로 나누고, 해당 배열의 요소가 '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;
}
후기
나름 깔끔하게 풀었다고 생각했는데 생각보다 지저분해서 코드 더 깔끔이 쓰는법을 연구해야겠다.
반응형
'알고리즘' 카테고리의 다른 글
오픈채팅방 (42888 / 프로그래머스 / JavaScript) (0) | 2021.12.21 |
---|---|
모음사전 ( 84512 /프로그래머스 / JavaScript) (0) | 2021.12.12 |
124나라의 숫자 ( 12899 / 프로그래머스 / JavaScript) (0) | 2021.12.03 |