최근에 프로그래머스를 좀 풀어보면서 코딜리티를 잊고 있었습니다...
동쪽으로 가는 차랑 서쪽으로 가는 차가 있어서 이들이 총 몇번 마주쳐 지나가는지 구하는 문제입니다.
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
가 얼마냐에 따라서 동쪽으로 가는 차들을 마주치는 수가 달라집니다. 그래서 위와 같은 코드가 실행가능한거고 마지막엔 문제에서 요구한 예외처리를 해주면서 프로그램을 마쳤습니다.
중괄호라든지 숫자나 공백 사용하는 방식 바꿨습니다.