프로그래머스 Day - 5

ᵁ-ᴷᴺᴼᵂᴺ·2023년 5월 21일
post-thumbnail

1. 코드 처리하기

목표 : 문자열이 주어졌을때, mode와 index에 따라 새로운 문자열 생성

//입력 (code)
"abc1abc1abc"
//출력
"acbac"
function solution(code) {
    let ret = "";
    let mode = 0;
    for (var i = 0; i<code.length; i++){
        if(mode == 0){
            if(code[i]==1) mode = 1;
            else if(i % 2 == 0) ret += code[i]
        } else {
            if(code[i]==1) mode = 0;
            else if(i % 2 == 1) ret += code[i]
        }
    }
    return ret==""? "EMPTY" : ret;
}

다음 문제의 핵심은 code라는 문자열이 들어왔을 때 default value를 0으로 가지는 mode에 따라 해당 문자열에서 문자를 추출해 새로운 문자열을 반환하는것이다. 기본 로직은 아래와 같다.

mode가 0일때, [index]가 짝수일때만 code[index]를 새로운 문자열의 뒤에 추가한다.
mode가 1일때, [index]가 홀수일때만 code[index]를 새로운 문자열의 뒤에 추가한다.
code[index]가 1이면 mode를 바꾼다.(0→1, 1→0)

  • 먼저 새로운 문자열 retmode에 default값인 ""과 0을 각각 설정한다.
  • code의 길이만큼 반복하는 반복문을 작성한다.
  • mode의 상태를 확인하고, code[index]의 값이 1인지 확인한다.
  • code[index]의 값이 1이 아닌 다른 값이면 각각 짝수와 홀수 [index]를 가지는 값을 ret에 추가한다.

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

목표 : boolean배열의 각 인덱스 값에 따라, true인 값만 등차수열의 값을 더해 반환

//입력(a, d, included)
3, 4, [true, false, false, true, true]
//출력
// 3 + 15 + 19 = 37(true인 항만 더함)
37
function solution(a, d, included) {
    let sum = 0;
    for (var i = 0; i< included.length; i++){
        if (included[i] == true) sum += a + i*d; 
    }
    return sum;
}
  • sum 변수를 설정하고 included의 배열 길이만큼 반복한다.
  • included[idx] 값이 true일때만 sum변수에 a+i*d를 해준다. 여기서 i는 추가하려는 항이 몇번째 항인지를 의미한다.

3. 주사위 게임 2

목표 : 세개의 주사위의 값을 이용해 조건식을 거친후 반환

//입력(a, b, c)
2, 6, 1
//출력
9
function solution(a, b, c) {
    if (a==b||b==c||a==c) {
        if (a==b&&b==c) {
            return (a+b+c)*(a**2+b**2+c**2)*(a**3+b**3+c**3)
        } else {
            return (a+b+c)*(a**2+b**2+c**2)   
        }
    } else {
        return a+b+c
    }
}
  • 세 숫자가 모두 다르다면 a + b + c
  • 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2)
  • 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )
  • if문을 사용하여 a와 b, c의 조건을 검사하여 반환하는 값을 다르게 한다.
  • **연산자를 사용하여 변수에 제곱을 해준다.

4. 원소들의 곱과 합

목표 : 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 반환

//입력
[3, 4, 5, 2, 1]
//출력
//모든 원소의 곱은 120, 합의 제곱은 225이므로 1을 return
1
function solution(num_list) {
    let n1 = 1;
    let n2 = 0;
    for (let i of num_list){
        n1 *= i;
        n2 += i;
    }
    return n1 > n2**2 ? 0 : 1;
}
  • 로직은 간단하다, 모든 원소의 곱을 저장할 n1을 1로 설정하고, 합의 제곱을 저장할 n2를 0으로 설정한다.
  • 반복문을 사용해 num_list의 값이 i로 갈때 모든 원소들을 곱하기 할당더하기 할당을 사용하여 각각 n1과 n2에 저장한다.
  • 3항 연산자로 n2에 제곱을 한 값을 n1과 비교하여 0과 1 둘중 어느것을 반환할지 선택한다.

5. 이어 붙인 수

목표 : 리스트의 원소가 홀짝에 따라 이어붙힌 문자열을 숫자로 연산후 반환

//입력
[3, 4, 5, 2, 1]	
//출력(351 + 42)
392
function solution(num_list) {
    let n1 = "";
    let n2 = "";
    for(let i of num_list){
        if (i%2==0) n1 += i
        else n2 += i
    }
    return Number(n1) + Number(n2)
}
  • n1과 n2를 빈 문자열로 선언하고, num_list의 길이만큼 반복한다.
  • num_list의 index에 해당하는 값을 받은 i를 홀짝을 판별한다.
  • 로직에 따라 n1과 n2에 각각 저장한다.
  • n1과 n2는 문자열이므로 Number()를 사용해 숫자로 바꿔 연산후 반환한다.
profile
ΔIM ΩΠ ҒULLSTΔCҜ

0개의 댓글