[알고리즘] 거리두기

Urther·2021년 10월 6일
0

알고리즘

목록 보기
8/41
post-thumbnail

이미 앉아 있는 사람들 중 가장 가까운 사람과 최대한 멀리 떨어져 앉을 좌석.. 그게 뭔데..

  1. dist 라는 배열 생성
    만약, 좌석[0]=1 이라면 그곳은 이미 사람이 앉아 있는 것이므로 d=1000해주어 dist=1000으로 들어간다. (이미 들어간 값은 d=0으로 교체)

  2. 좌석[1]=0 이라면 아무도 앉지 않는 좌석이다. dist[1]=d++;

앉은 사람 중에 좌석을 계속 추가해서 나가는 것이다.

[예매][NO예매] [NO예매][NO예매] [예매] 라면,
1000 1 2 3 0 이 dist 배열 안에 들어간다.

먼저 → 이 방향으로 진행해주고,
다음으로 ← 이 방향으로 진행해주어야 한다.

만약, dist에 값이 존재한다면 가장 min 값을 계산해서 넣는다.

function solution(seat){
  let n=seat.length
  let dist=new Array(n).fill(0);

  let answer=0;
  
  let d=1000;
  for(let i=0;i<n;i++){
    // 정방향으로 가는 경우
    if(seat[i]===1){
      d=0;
      dist[i]=d;
    }
    else{
      d++;
      dist[i]=d;
    }
  }

  // 역방향으로 가는 경우
  for(let i=n-1;i>=0;i--){
    if(seat[i]===1){
      d=0;
      dist[i]=d;
    }
    else{
      d++;
      dist[i]=Math.min(dist[i],d);
    }
  }
  answer=Math.max(...dist);

  return answer;
}

console.log(solution([1,0,0,0,1,0,0,1,0,1]));
profile
이전해요 ☘️ https://mei-zy.tistory.com

0개의 댓글