문제

Given an array arr and a chunk size size, return a chunked array. A chunked array contains the original elements in arr, but consists of subarrays each of length size. The length of the last subarray may be less than size if arr.length is not evenly divisible by size.

You may assume the array is the output of JSON.parse. In other words, it is valid JSON.

Please solve it without using lodash's _.chunk function.

https://leetcode.com/problems/chunk-array/

 

예시

 

코드

/**
 * @param {Array} arr
 * @param {number} size
 * @return {Array}
 */
var chunk = function(arr, size) {
    const outputArr = [];
    
    for(let i = 0; i < arr.length; i+=size){
        outputArr.push(arr.slice(i, i+size));
    }
    
    return outputArr;
};

 

 

인자로 들어오는 arr과 size로 새로운 배열을 만들어 리턴해야 한다. arr에 있는 원소들을 size만큼 잘라서 새로운 배열에 넣어주면 된다. Array.prototype.slice()를 이용해서 인자로 들어오는 arr를 size 만큼 잘라주었다.

728x90

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN&

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 비트마스킹
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine());
        
        for(int t = 1; t <= T; t++){
            int N = Integer.parseInt(br.readLine());

            int k = 0; // 배수 저장
            
            // 9 8 7 6 5 4 3 2 1 0을 봤는지의 여부를 각각 저장함.
            // 0000000000과 같음.
            // 봤을 때 해당 자리를 1로 변경할 것임.
            int visited = 0;

            while (true){
                // k * N하기
                // 현재 센 양 번호를 구하고 char형 배열에 저장
                char[] sheepIdx = Integer.toString(++k * N).toCharArray();

                // 양 번호에 존재하는 숫자를 체크함
                for(int i = 0; i < sheepIdx.length; i++){
                    int num = sheepIdx[i] - '0'; // char 형을 int로 변경
                    
                    // 1. 오른쪽에서 num 자리번째가 1인 이진수 만들기
                    // 1 << num
                    // 2. 기존 visited에 1 표시하기
                    // 위에서 만든 이진수와 OR 연산을 통해 원하는 자리를 1로 변경하기
                    visited = visited | (1 << num);
                }

                // 0 ~ 9까지 모든 숫자를 봤는지 체크
                if(checkAllNumber(visited)) break;
            }

            sb.append("#").append(t).append(" ").append(k*N).append("\n");
        }

        System.out.println(sb.toString());
    }

	
    static final int standardNum = (1 << 10) - 1; // 1111111111. 모든 숫자를 보게 되는 경우
    public static boolean checkAllNumber(int targetNum){
        return targetNum == standardNum;
    }
}

 

728x90

문제

Write a function createHelloWorld. It should return a new function that always returns "Hello World".

https://leetcode.com/problems/create-hello-world-function/

 

예시

 

코드

/**
 * @return {Function}
 */
var createHelloWorld = function() {
    
    return function(...args) {
        return "Hello World";
    }
};

/**
 * const f = createHelloWorld();
 * f(); // "Hello World"
 */

 

createHelloworld는 함수를 반환해야 하고, 반환된 함수를 호출했을 때 "Hello World"라는 문자열이 리턴되면 된다.

728x90

문제

Given a function fn, return a new function that is identical to the original function except that it ensures fn is called at most once.

  • The first time the returned function is called, it should return the same result as fn.
  • Every subsequent time it is called, it should return undefined.

https://leetcode.com/problems/allow-one-function-call/

 

예시

 

코드

type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue };
type OnceFn = (...args: JSONValue[]) => JSONValue | undefined

function once(fn: Function): OnceFn {
    let isCalled = false;

    return function (...args) {
        if(isCalled) return undefined;
        isCalled = true;
        
        return fn(...args);
    };
    
    
}

/**
 * let fn = (a,b,c) => (a + b + c)
 * let onceFn = once(fn)
 *
 * onceFn(1,2,3); // 6
 * onceFn(2,3,6); // returns undefined without calling fn
 */

once 함수는 단 한번만 실행되어야 하는 함수이다. 처음 실행됐을 때는 인자로 들어오는 fn이 실행되어야 하고, 그 후로 인자로 fn이 들어오면 undefined가 실행되어야 한다. 따라서 isCalled라는 변수를 이용해 fn의 실행 여부를 저장하고, 한 번 실행이 되면 isCalled를 true로 변경시켰다.

728x90

문제

Write a function createCounter. It should accept an initial integer init. It should return an object with three functions.

The three functions are:

  • increment() increases the current value by 1 and then returns it.
  • decrement() reduces the current value by 1 and then returns it.
  • reset() sets the current value to init and then returns it.

https://leetcode.com/problems/counter-ii/

 

예시

 

코드

/**
 * @param {integer} init
 * @return { increment: Function, decrement: Function, reset: Function }
 */
var createCounter = function(init) {
    let value = init;
    
    const counter = {
        increment() {
            return value += 1;
        },
        decrement(){
            return value -= 1;
        },
        reset(){
            return value = init;
        }
    }
    
    return counter;
};

/**
 * const counter = createCounter(5)
 * counter.increment(); // 6
 * counter.reset(); // 5
 * counter.decrement(); // 4
 */

 

 

createCounter가 counter 객체를 리턴하도록 하였다. counter 객체는 increment(), reset(), decrement() 메소드를 갖고 있으며, 인자로 들어온 초기값에 대해 각각 +1, init, -1 값을 리턴한다.

728x90

+ Recent posts