programmers

코딩 테스트 / 저주의 숫자 3, 다항식 더하기

이미사용 2023. 6. 4. 15:41
명언
-
728x90
반응형

저주의 숫자 3

 

※풀이

1. 초기값으로 answer를 0으로 설정하고, 숫자들을 저장할 빈 배열 arr을 생성합니다.
2. 반복문을 사용하여 0부터 n까지의 수를 반복합니다.
· answer를 1씩 증가시킵니다.
· while 루프를 사용하여 answer가 3의 배수이거나 숫자 내에 3이 포함되어 있는 경우, answer를 1씩 증가시킵니다.
· answer % 3 == 0: answer가 3의 배수인지 확인합니다.
· answer.toString().split('').includes('3'): answer를 문자열로 변환한 후, split() 함수를 사용하여 각 자릿수로 분리한 배열에 '3'이 포함되어 있는지 확인합니다.
· 위의 두 조건 중 하나라도 참일 경우, while 루프를 계속 반복하며 answer를 증가시킵니다.
3. 결과값 answer를 반환합니다.

 

 

ex1)

    {
        function solution(n) {
            let answer = 0;
            let arr = []
            for (let i = 0; i < n; i++){
                answer += 1;
                while (answer % 3 == 0 || answer.toString().split('').includes('3')){
                    answer += 1;
                }
            }
            return answer;
        }
        console.log(solution(15));
        //25
    }

ex2)

    {
        function solution(n) {
            let answer = 0;
            let arr = []
            for (let i = 0; i < n; i++){
                answer += 1;
                while (answer % 3 == 0 || answer.toString().split('').includes('3')){
                    answer += 1;
                }
            }
            return answer;
        }
        console.log(solution(40));
        //76
    }

 

 

다항식 더하기

 

※풀이

1. polynomial을 "+"를 기준으로 분리하여 배열 arr에 저장합니다.
· polynomial.split(' + '): "+"를 기준으로 다항식을 분리합니다.
2. arr에서 "x"를 포함하는 항들을 필터링하고, "x"를 제거하고 숫자로 변환한 뒤 배열에 저장합니다. 만약 "x"만 존재한다면 1로 간주합니다.
· arr.filter(v => v.includes('x')): "x"를 포함하는 항들을 필터링합니다.
· v.replace('x', ''): "x"를 제거합니다.
· parseInt(v.replace('x', '')) || 1: "x"를 제거한 결과를 정수로 변환합니다. 만약 결과가 NaN이라면 1로 설정합니다.
3. arr에서 "x"를 포함하지 않는 항들을 필터링하고, 정수로 변환한 뒤 합을 구합니다.
· arr.filter(v => !v.includes('x')): "x"를 포함하지 않는 항들을 필터링합니다.
· parseInt(c): 항을 정수로 변환합니다.
· reduce((a, c) => a + parseInt(c), 0): 합을 구합니다.
4. 결과를 반환하기 위해 빈 배열 answer를 생성합니다.
5. x 값이 존재하면 처리합니다.
· if (x): x가 0이 아니면 실행됩니다.
· if (x === 1): x가 1인 경우, 'x'를 answer 배열에 추가합니다.
· else: 그 외의 경우, ${x}x 형태의 문자열을 answer 배열에 추가합니다.
6. nomal 값이 존재하면 처리합니다.
· if (nomal): nomal이 0이 아니면 실행됩니다.
· answer.push(nomal): nomal을 answer 배열에 추가합니다.
7. answer 배열을 문자열로 변환하여 반환합니다. 항들은 " + "로 구분됩니다.
· return answer.join(' + ');

 

 

ex1)

    {
        function solution(polynomial) {
            const arr = polynomial.split(' + ')
            const x = arr.filter(v => v.includes('x')).map(v => parseInt(v.replace('x', '')) || 1).reduce((a, c) => a + c, 0)
            const nomal = arr.filter(v => !v.includes('x')).reduce((a, c) => a + parseInt(c), 0)
            const answer = [];
            if(x){
                if (x === 1){
                    answer.push('x')
                } else {
                    answer.push(`${x}x`)
                }
            }
            if (nomal){
                answer.push(nomal)
            }
            return answer.join(' + ');
        }
        console.log(solution("3x + 7 + x"));
        //"4x + 7"
    }

ex2)

    {
        function solution(polynomial) {
            const arr = polynomial.split(' + ')
            const x = arr.filter(v => v.includes('x')).map(v => parseInt(v.replace('x', '')) || 1).reduce((a, c) => a + c, 0)
            const nomal = arr.filter(v => !v.includes('x')).reduce((a, c) => a + parseInt(c), 0)
            const answer = [];
            if(x){
                if (x === 1){
                    answer.push('x')
                } else {
                    answer.push(`${x}x`)
                }
            }
            if (nomal){
                answer.push(nomal)
            }
            return answer.join(' + ');
        }
        console.log(solution("x + x + x"));
        //"3x"
    }

 

 

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