programmers

코딩 테스트 / 옹알이 (1), 정수를 나선형으로 배치하기

이미사용 2023. 6. 6. 22:26
명언
-
728x90
반응형

옹알이 (1)

※풀이

 

1. validSounds 변수에 "aya", "ye", "woo", "ma"를 포함한 Set을 생성합니다. 이 Set은 유효한 발음을 저장하는데 사용됩니다.
2. reduce 함수를 사용하여 babbling 배열을 순회합니다. reduce 함수는 초기값으로 0을 설정하고, 각 단어를 처리하면서 유효한 발음을 확인하고 카운트를 증가시킵니다.

3.  isValid 변수를 true로 저장 합니다. 이 변수는 현재 단어가 유효한 발음으로 이루어져 있는지 여부를 나타냅니다.
4. remainingWord 변수에 현재 단어를 할당합니다.
5. while 루프를 사용하여 remainingWord의 길이가 0보다 큰 동안 반복합니다.
6. foundValidSound 변수를 false로 초기화합니다. 이 변수는 현재 단어의 시작 부분이 유효한 발음으로 시작하는지 여부를 나타냅니다.
7. validSounds Set에 있는 각 발음에 대해 현재 단어의 시작 부분과 일치하는지 확인합니다. 만약 일치한다면, 현재 발음의 길이만큼 remainingWord를 잘라냅니다.
8. foundValidSound가 true로 설정된 경우, 유효한 발음을 찾았으므로 루프를 종료합니다.
9. foundValidSound가 false인 경우, 유효한 발음을 찾지 못한 것이므로 isValid를 false로 설정하고 루프를 종료합니다.
10. isValid가 true인 경우, 현재 단어는 유효한 발음으로 이루어져 있으므로 카운트를 1 증가시킵니다.
11. isValid가 false인 경우, 현재 단어는 유효한 발음으로 이루어져 있지 않으므로 카운트를 그대로 유지합니다.
12. reduce 함수가 반환하는 최종 카운트 값을 반환합니다.

 

ex1)

    {
        function solution(babbling) {
            const validSounds = new Set(["aya", "ye", "woo", "ma"]);

            return babbling.reduce((count, word) => {
                let isValid = true;
                let remainingWord = word;

                while (remainingWord.length > 0) {
                    let foundValidSound = false;

                    for (let sound of validSounds) {
                        if (remainingWord.startsWith(sound)) {
                            remainingWord = remainingWord.slice(sound.length);
                            foundValidSound = true;
                            break;
                        }
                    }

                    if (!foundValidSound) {
                        isValid = false;
                        break;
                    }
                }

                return isValid ? count + 1 : count;
            }, 0);
        }
        console.log(solution(["aya", "yee", "u", "maa", "wyeoo"]));
        //1
    }

ex2)

    {
        function solution(babbling) {
            const validSounds = new Set(["aya", "ye", "woo", "ma"]);

            return babbling.reduce((count, word) => {
                let isValid = true;
                let remainingWord = word;

                while (remainingWord.length > 0) {
                    let foundValidSound = false;

                    for (let sound of validSounds) {
                        if (remainingWord.startsWith(sound)) {
                            remainingWord = remainingWord.slice(sound.length);
                            foundValidSound = true;
                            break;
                        }
                    }

                    if (!foundValidSound) {
                        isValid = false;
                        break;
                    }
                }

                return isValid ? count + 1 : count;
            }, 0);
        }
        console.log(solution(["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]));
        //3
    }

 

 

정수를 나선형으로 배치하기

 

※풀이

1. 먼저, Array.from 메서드를 사용하여 크기 n의 빈 배열을 생성합니다. 각 요소는 빈 배열로 초기화됩니다. 이 배열은 결과를 저장하기 위한 배열입니다.
2. 변수 num을 1로 초기화하고, 숫자를 하나씩 증가시키면서 배열에 할당합니다.
3. 변수 top, bottom, left, right을 이용하여 배열의 범위를 설정합니다. 초기에는 top과 left는 0, bottom과 right는 n-1로 설정합니다. 이 범위를 이용하여 배열의 테두리를 따라 숫자를 배치합니다.
4. 주어진 범위 내에서 숫자를 배치하기 위해 4개의 반복문을 사용합니다. 각 반복문은 특정 방향으로 이동하며 숫자를 배열에 할당합니다. 숫자 할당이 완료되면 해당 방향으로 한 칸씩 이동하고, 반복문이 다시 실행됩니다. 이 과정을 num이 n*n보다 작거나 같을 때까지 반복합니다.
5. 반복문이 완료되면 배열에는 숫자가 나선형으로 배치되어 있습니다. 이 배열을 결과로 반환합니다.

 

 

 

 

ex1)

    {
        function solution(n) {
            const result = Array.from({ length: n }, () => []);
            let num = 1;
            let top = 0;
            let bottom = n - 1;
            let left = 0;
            let right = n - 1;
            while (num <= n * n) {
                for (let i = left; i <= right; i++) {
                    result[top][i] = num++;
                }
                top++;
                for (let i = top; i <= bottom; i++) {
                    result[i][right] = num++;
                }
                right--;
                for (let i = right; i >= left; i--) {
                    result[bottom][i] = num++;
                }
                bottom--;
                for (let i = bottom; i >= top; i--) {
                    result[i][left] = num++;
                }
                left++;
            }
            return result;
        }
        console.log(solution(4));
        //[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
    }

 

ex2)

    {
        function solution(n) {
            const result = Array.from({ length: n }, () => []);
            let num = 1;
            let top = 0;
            let bottom = n - 1;
            let left = 0;
            let right = n - 1;
            while (num <= n * n) {
                for (let i = left; i <= right; i++) {
                    result[top][i] = num++;
                }
                top++;
                for (let i = top; i <= bottom; i++) {
                    result[i][right] = num++;
                }
                right--;
                for (let i = right; i >= left; i--) {
                    result[bottom][i] = num++;
                }
                bottom--;
                for (let i = bottom; i >= top; i--) {
                    result[i][left] = num++;
                }
                left++;
            }
            return result;
        }
        console.log(solution(5));
        //[[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]
    }