Algorithm/Javascript

[프로그래머스] 230705 코딩테스트 연습

보라해바라기 2023. 7. 5. 17:16
SMALL

1. 코드 처리하기

(1) 조건

- 문자열 code를 읽으며, 만약 문자가 "1" 이면 mode 변경
- mode: 0, 1 존재
- 결과 문자열 ret 생성

mode : 0
case1. code[idx]가 "1"이 아닐 때, 짝수 idx를 가지는 code[idx]를 ret 맨 뒤에 추가
case2. code[idx]가 "1"일 때, mode를 0에서 1로 변경

mode : 1
case1. code[idx]가 "1"이 아닐 때, 홀수 idx를 가지는 code[idx]를 ret 맨 뒤에 추가
case2. code[idx]가 "1"일 때, mode를 1에서 0로 변경

- 시작할 때, mode는 0
- return하려는 ret이 빈 문자열 > "EMPTY" return

 

(2) 코드

// 시작할 때 mode는 0
// return 하려는 ret가 만약 빈 문자열 > "EMPTY"를 return

function solution(code) {
    var ret = '';
    var mode = 0;
    var str = code.split('');
    
    for(var i=0; i<str.length; i++) {
        if (mode == 0) { 
            if (str[i] == "1") {
                    mode = 1;
                } else { // str[i] != "1"
                    if (i%2 == 0) {
                        ret += str[i];
                    }
                } 
        } else if (mode == 1) {
            if (str[i] == "1") {
                mode = 0;
            } else{
                if (i%2 == 1) {
                    ret += str[i];
                }
            }
        }    
    }
    
    if (ret == "") {
        ret = "EMPTY";
    }
    
    return ret;
}

 

 

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

// a+d*idx

function solution(a, d, included) {
    var answer = 0;
    
    for (var i=0; i<included.length; i++) {
        if (included[i] == true) {
            answer += (a+d*i);
        } else {
            continue;
        }
    }
    
    
    return answer;
}

 

3. 주사위 게임 2

(1) 조건

- 1부터 6까지 적힌 주사위 3개
- 각 주사위의 값은 a, b, c

점수 부여 기준
- 세 숫자가 모두 다름 : a+b+c
- 세 숫자 중 어느 두 숫자가 같음 : (a + b + c) × (a^2 + b^2 + c^2)
- 세 숫자가 모두 같음 :  (a + b + c) × (a^2 + b^2 + c^2) × (a^3 + b^3 + c^3)

제한 사항
- a, b, c는 1이상 6이하의 정수

 

(2) 코드

function solution(a, b, c) {
    var answer = 0;
    
    // answer = (a+b+c) * (a*a+b*b+c*c) * (a*a*a+b*b*b+c*c*c);
    
    // 제한사항 조건 주기
    if ( a>=1 && b>=1 && c>=1 && a<=6 && b<=6 && c<=6) {
        if ( a == b ) {
            if ( b == c ){ // 3개 다 동일
                answer = (a+b+c) * (a*a+b*b+c*c) * (a*a*a+b*b*b+c*c*c);
            } else { // ( b != c )
                // 2개 동일
                answer = (a+b+c) * (a*a+b*b+c*c);
            }
        } else { // ( a != b )
            if ( b == c ){ // 2개 동일
                answer = (a+b+c) * (a*a+b*b+c*c);
            } else { // ( b != c )
                if ( a == c) { // 2개 같음
                    answer = (a+b+c) * (a*a+b*b+c*c);
                } else { // ( a != c )
                    // 3개 다 다름
                    answer = (a+b+c);
                }
            }
        }
    } else {
        answer = "a,b,c 값을 다시 입력해주세요.";
    }
    
    return answer;
}

 

 

 

 

728x90