programmers

코딩 테스트 / 컨트롤 제트, 등수 매기기

이미사용 2023. 6. 2. 02:08
명언
-
728x90
반응형

컨트롤 제트

※풀이

1. s = s.split(' ') 코드는 주어진 문자열 s를 공백을 기준으로 분리하여 배열로 만듭니다. 이렇게 하면 s는 문자열 배열이 됩니다.
2. result라는 빈 배열을 선언합니다. 이 배열은 최종 결과를 저장할 배열입니다.
3. 반복문을 통해 s의 각 요소를 순회합니다. 반복문의 변수 i는 s의 각 요소를 차례대로 가리킵니다.
4. if(i === 'Z') 조건문은 현재 요소 i가 문자열 'Z'인지 확인합니다. 만약 그렇다면 result.pop()을 호출하여 result 배열에서 마지막 요소를 제거합니다. 이는 'Z'의 동작을 시뮬레이션하는 부분입니다.
5. else 블록은 i가 문자열 'Z'가 아닌 경우 실행됩니다. 이 경우, i를 숫자로 변환하여 result 배열에 추가합니다. +i는 i를 숫자로 변환하는 방법 중 하나입니다.
6. 반복문이 끝나면 result 배열에 모든 요소가 저장되어 있습니다. result.reduce((a, c) => a + c, 0)는 result 배열의 모든 요소를 더한 값을 계산합니다. reduce 함수는 배열 요소를 순회하면서 주어진 함수를 적용하여 단일 값으로 줄이는 역할을 합니다. 초기값으로 0을 설정하여 시작합니다. 그후 계산된 값이 반환됩니다.

 

ex1)

    {
        function solution(s) {
            s = s.split(' ')
            let result = [];
            for (let i of s){
                if(i === 'Z'){
                    result.pop()    
                } else {
                    result.push(+i)
                }
            }
            return result.reduce((a, c) => a + c, 0)
        }
        console.log(solution("1 2 Z 3"));
        //4
    }

ex2)

    {
        function solution(s) {
            s = s.split(' ')
            let result = [];
            for (let i of s){
                if(i === 'Z'){
                    result.pop()    
                } else {
                    result.push(+i)
                }
            }
            return result.reduce((a, c) => a + c, 0)
        }
        console.log(solution("10 20 30 40"));
        //100
    }

 

등수 매기기

※풀이

1. total 변수는 score 배열의 각 요소에 대해 첫 번째 요소와 두 번째 요소를 더한 값을 저장하는 배열입니다. score.map(v => v[0] + v[1]) 코드는 score 배열을 순회하면서 각 요소의 첫 번째 요소와 두 번째 요소를 더하여 새로운 배열을 생성합니다.
2. array 변수는 total 배열을 복사한 후, 내림차순으로 정렬한 배열입니다. total.slice()를 통해 total 배열을 복사하고, sort((a,b) => b - a)를 사용하여 내림차순으로 정렬합니다.
3. total.map((v) => array.indexOf(v) + 1) 코드는 total 배열의 각 요소에 대해 순위를 계산하여 새로운 배열을 생성합니다. 4. map 함수를 사용하여 total 배열을 순회하면서 각 요소 v의 인덱스를 array.indexOf(v)를 통해 찾고, 찾은 인덱스에 1을 더하여 순위로 변환합니다. 인덱스는 0부터 시작하므로 1을 더해 1부터 시작하는 순위로 변환한후 계산한값을 반환합니다.

ex1)

    {
        function solution(score) {
            let total = score.map(v => v[0] + v[1])
            let array = total.slice().sort((a,b) => b - a)
            return total.map((v) => array.indexOf(v) + 1);
        }
        console.log(solution([[80, 70], [90, 50], [40, 70], [50, 80]]));
        //[1, 2, 4, 3]
    }

 

ex2)

    {
        function solution(score) {
            let total = score.map(v => v[0] + v[1])
            let array = total.slice().sort((a,b) => b - a)
            return total.map((v) => array.indexOf(v) + 1);
        }
        console.log(solution([[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]]));
        //[4, 4, 6, 2, 2, 1, 7]
    }

 

출처:https://school.programmers.co.kr/