[JavaScript/자바스크립트]Day5

신승아·2025년 8월 5일

[Language/JavaScript]

목록 보기
2/3
post-thumbnail

1. 코드 처리하기

📖 1. 문제 설명

문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다.
mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.

mode는 0과 1이 있으며, idx를 0부터 code의 길이 -1까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

  • mode가 0일때

    • code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
  • mode가 1일때

    • code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
    • code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.

문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 'EMPTY'를 return합니다.

❗ 제한 사항

  • 1 <= code의 길이 <=100,000
    • code는 알파벳 소문자 또는 "1"로 이루어진 문자열 입니다.

💡 입출력 예

  • code의 각 인덱스 i에 따라 다음과 같이 mode와 ret가 변환합니다.

    따라서 "acbac"를 return 합니다.

💻 코드

// 내코드
function solution(code) {
    var answer = "";
    var mode = 0;
    var arr = code.split("");
    arr.map((i, k) => {
        if(i ==='1') {
            mode = 1 - mode;  
        } else if(mode === 0 && k % 2 === 0) {
            answer +=i;
        } else if (mode ===1 && k % 2 === 1) {
            answer +=i;
        } 
    });
    if(answer === '') {
        answer = 'EMPTY';
    }
    return answer;
}

2. 등차수열의 특정한 항만 더하기

📖 2. 문제 설명

두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i+1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return하는 solution 함수를 작성해 주세요.

❗ 제한 사항

  • 1 <= a <= 100
  • 1 <= d <= 100
  • 1 <= included의 길이 <= 100
  • included에는 true가 적어도 하나 존재합니다.

💡 입출력 예

  • a와 d가 각각 3,4 이고 included의 길이가 5입니다. 이를 표로 나타내면 다음과 같습니다.

    따라서 true에 해당하는 1항, 4항, 5항을 더한 3 + 15 + 19 = 37을 return 합니다.

  • a와 d가 각각 7,1이고 included의 길이가 7입니다. 이를 표로 나타내면 다음과 같습니다.

    따라서 4항만 true이므로 10을 return 합니다.

💻 코드

//내 코드
function solution(a, d, included) {
    var answer = 0;
    for(var i = 0; i < included.length; i++) {
        if (included[i]) {
            answer += (a + i * d);
        }
    }
    return answer;
}
//다른 사람 코드
function solution(a, d, included) {
	return included.reduce((acc, flag, i) => {
    	return flag? acc + a + d + i : acc
    }, 0)
}

3. 주사위 게임2

📖 2. 문제 설명

1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.

  • 세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
  • 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a+b+c)(a2+b2+c2)( a + b + c) * (a^2 + b^2 + c^2) 점을 얻습니다.
  • 세 숫자가 모두 같다면 (a+b+c)(a2+b2+c2)(a3+b3+c3)( a + b + c) * (a^2 + b^2 + c^2) * (a^3 + b^3 + c^3) 점을 얻습니다.

세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

❗ 제한 사항

  • a, b, c는 1이상 6이하의 정수입니다.

💡 입출력 예

  • 예제 1번에서 세 주사위 숫자가 모두 다르다면 2 + 6 + 1 = 9점을 얻습니다. 따라서 9를 return합니다.
  • 예제 2번에서 두 주사위 숫자만 같으므로 (5+3+3)(52+32+32)=1143=473(5 + 3 + 3)*(5^2+3^2+3^2) = 11 * 43 = 473점을 얻습니다.
  • 예제 3번에서 세 주사위 숫자가 모두 같으므로 (4+4+4)(42+42+42)(43+43+43)=1248192=110,592(4 + 4 + 4) * (4^2 + 4^2 + 4^2) * (4^3 + 4^3 + 4^3) = 12 * 48 * 192 = 110,592를 return 합니다.

💻 코드

//내 코드
function solution(a, b, c) {
    var answer = 0;
    if(a === b && b === c) {
        answer = (a + b + c)*( a**2 + b**2 + c**2)*(a**3 + b**3 + c**3);
    } else if (a !== b && a !== c && b !==c) {
        answer = a + b + c;
    } else {
        answer = (a + b + c)*( a**2 + b**2 + c**2);
    }
    return answer;
}

Day5 알고리즘을 마치며,,

기본적인 산수에서 조건문으로 넘어온 만큼 생각하는 시간이 길어지는 것을 느꼈다. 다른 사람의 풀이를 보면서 이건 왜 이렇게 풀었을까? 고민도 하고 가장 자스같은 코드가 뭘까 고민도 많이 했다.
구현 단계로 넘어갈때 조금이라도 효율적인 코드를 작성하기 위해서 공부를 많이 해야할 거 같다..

0개의 댓글