[ Codility ] - Lesson5 PassingCars(C++)

DPOS·2021년 9월 15일
1

Codility

목록 보기
11/11
post-thumbnail

최근에 프로그래머스를 좀 풀어보면서 코딜리티를 잊고 있었습니다...

문제조건

  • N개의 0 Or 1로 채워진 벡터 A
  • 0 = 동쪽으로 이동하는 차
  • 1 = 서쪽으로 이동하는 차
  • res = 마주친 차의 수

문제설명

  동쪽으로 가는 차랑 서쪽으로 가는 차가 있어서 이들이 총 몇번 마주쳐 지나가는지 구하는 문제입니다.

문제코드

int solution(vector<int> &A) {
    int ecnt = 0;
    int sum = 0;

    for(int i = 0; i < A.size(); i++) {
        if(A[i] == 0) { ecnt++; }
        else { sum += ecnt; }
        if(sum > 1000000000) { return -1; }
    }

    return sum;
}

코드설명

  먼저, 동쪽으로 가는 차를 ecnt로 잡아주고 총 마주친 횟수를 sum으로 정의해줍니다. 그리고 조건문을 통해 i번째 자동차가 서쪽으로 가는지 동쪽으로 가는지 확인해서 동쪽으로가면 cnt를 증가시켜주고, 서쪽으로 가면 sum += ecnt를 해줍니다. 그 이유는 다음의 그림을 보면서 설명하겠습니다.

여기서 하얀색차를 예로 들어보겠습니다. 지금 프로그램상으로는 i가 2를 지나 3이 됐다고 했을때, ecnt가 2가 됩니다. 그리고 하얀차는 파란차와 초록차를 지나 총 2개를 지나게 됩니다. 즉, ecnt가 얼마냐에 따라서 동쪽으로 가는 차들을 마주치는 수가 달라집니다. 그래서 위와 같은 코드가 실행가능한거고 마지막엔 문제에서 요구한 예외처리를 해주면서 프로그램을 마쳤습니다.

결과사진

profile
본인 전공빼고 다 하는 사람

2개의 댓글

comment-user-thumbnail
2021년 9월 15일

중괄호라든지 숫자나 공백 사용하는 방식 바꿨습니다.

답글 달기
comment-user-thumbnail
2022년 3월 8일

모르겠어요 ㅜㅜ

답글 달기