avatar
Published on

Codility - Passing Cars

Author
  • avatar
    Name
    yceffort

Passing Cars

문제

N의 길이로 이루어진 배열 A는 0과 1로 이루어져 있는데, 0과 1은 각각 다음과 같은 의미를 가지고 있다.

  • 0은 차가 동쪽으로 간다
  • 1은 차가 서쪽으로 간다

이 때 동쪽으로 간 차와 서쪽으로 간 차를 짝지을 수 있는 개수를 구하라. 단 먼저 동쪽으로 간차와 그 이후에 서쪽으로 간 차만 짝 지을 수 있다.

A배열이 아래와 같이 주어져 있다면
A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1

짝 지을 수 있는 경우의 수는 (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).

5가지다.

단 짝의 개수가 1,000,000,000개를 넘어가면 그냥 -1을 리턴한다.

풀이

// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');

function solution(A) {
  // 동쪽으로 간차의 개수를 센다
  let east = 0
  // 결과
  let passing = 0

  for (let i of A) {
    // 동쪽으로 간 차를 센다.
    if (i === 0) {
      east += 1
    } else {
      // 서쪽으로 간 차가 나타난다면, 현재 동쪽으로 간 차 개수만큼 더한다.
      // 현재 동쪽으로 간 차 개수만큼 짝이 될 수 있기 때문이다.
      passing += east
    }
  }

  if (passing > 1000000000) {
    return -1
  }

  return passing
}

https://app.codility.com/demo/results/trainingXFPYT4-R3D/