2021/12/28) 4. 점수 계산 [1,2차원 탐색]

굥굥이·2021년 12월 28일
0
post-thumbnail

1. 문제

<점수 계산>
: OX 문제는 맞거나 틀린 두 경우의 답을 가지는 문제를 말한다. 여러 개의 OX 문제로 만들어진 시험에서 연속적으로 답을 맞히는 경우에는 가산점을 주기 위해서 다음과 같이 점수 계산을 하기로 하였다.
1번 문제가 맞는 경우에는 1점으로 계산한다. 앞의 문제에 대해서는 답을 틀리다가 답이 맞는 처음 문제는 1점으로 계산한다. 또한, 연속으로 답이 맞는 경우에는 두 번째 문제는 2점, 세 번째 문제는 3점, ..., K번째 문제는 K점으로 계산한다. 틀린 문제는 0점으로 계산한다.

시험문제의 채점 결과가 주어졌을 때, 총 점수를 계산하는 프로그램을 작성한다.

2. 해결 방법

for..of문을 이용해서 x가 1이면 cnt ++를 해준다. 그러면 처음에 1이 들어오면 cnt에 1이 누적되고, 그 다음에 또 1이 들어오면 1이 또 더해지니 총 2가 누적된다.(이런 식으로 반복) 그러나 한 번이라도 0이 들어오면 cnt는 0으로 초기화된다.

! 플러스 개념
-> 증감연산자.

  • 증가연산자와 감소연산자를 합한 말이다.
    연산식에서 증감 연산자만 사용한다면 증감자의 위치는 상관이 없지만, 다른 연산자와 함께 사용한다면 증감자의 위치에 따라 연산식에 결과가 달라지므로 주의해야 한다.
  • ++x는 수행하기 전에 증가! xx+는 수행한 후에 증가!

3. 정답

        <script>
            function solution(arr){         
                let answer=0, cnt=0;
                for(let x of arr){
                    if(x===1){
                        cnt++;
                        answer+=cnt;
                    }
                    else cnt=0;
                }                  
                return answer;
            }
            let arr=[1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
            console.log(solution(arr));
        </script>

4. 내 코드와 비교 그리고 반성

크리스마스 핑계대고 1일 1알고리즘을 하지 않았다..
그리고 내 코드는 문제를 제대로 해석하지 못한 코드다. 연속으로 k번째 문제는 k점으로 계산하여야 하는데, 내 코드는 그렇지 않다. 이제 점점 알고리즘이 쉽게 느껴져서 대충짜도 얼추 맞는 답이 나오는데 이렇게 해선 안된다. 내 코드에 확신이 드는 코드를 짜도록 하자.

        <script>
            function solution(arr){         
                //어차피 0혹은 1의 값만 들어오니까 arr[i]의 값을 answer에 넣어줬음
                let answer = arr[0];
                for(let i = 1; i < arr.length; i++){
                    if(arr[i-1] === 1 && arr[i] === 1){
                        answer += arr[i] + 1;
                        if(arr[i-2] ===1 && arr[i-1] === 1 && arr[i] === 1) answer += 1;
                    } 
                    else answer += arr[i];
                }
                return answer;
            }
            let arr=[1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
            console.log(solution(arr));
        </script>
profile
아자아자 파이띵굥!

0개의 댓글